X-Git-Url: https://piware.de/gitweb/?p=learn-rust.git;a=blobdiff_plain;f=serde%2Fsrc%2Fmain.rs;h=cdc7c81259b5aa4b177fbf2cb8197d7b78b30fc6;hp=1357100b79351126faa8f046e27aa378611ff246;hb=1937a8d2b7c38d7ed44d6e5077e31833ca0903c4;hpb=c90073a9f013cde0cbf84fa43f986f6c74d38168 diff --git a/serde/src/main.rs b/serde/src/main.rs index 1357100..cdc7c81 100644 --- a/serde/src/main.rs +++ b/serde/src/main.rs @@ -1,6 +1,10 @@ use std::fs; +use std::error::Error; + use serde::{Serialize, Deserialize}; +const DB_PATH: &str = "/tmp/contacts.json"; + #[derive(Serialize, Deserialize, Debug)] enum Social { Twitter(String), @@ -25,15 +29,24 @@ fn build_contacts() -> Contacts { ] } -fn create_contacts() { +fn create_contacts() -> Result<(), Box> { let contacts = build_contacts(); - // FIXME: Use ? and return Result - let serialized = serde_json::to_string(&contacts).unwrap(); - println!("serialized: {}", serialized); - let mut f = fs::File::create("/tmp/contacts.json").unwrap_or_else(|e| panic!("Could not create /tmp/contacts.json: {:?}", e)); - serde_json::to_writer_pretty(&mut f, &contacts).unwrap_or_else(|e| panic!("Could not serialize contacts: {:?}", e)); + let serialized = serde_json::to_string(&contacts)?; + log::debug!("serialized: {}", &serialized); + let mut f = fs::File::create(DB_PATH)?; + serde_json::to_writer_pretty(&mut f, &contacts)?; + Ok(()) +} + +fn load_contacts() -> Result> { + let f = fs::File::open(DB_PATH)?; + Ok(serde_json::from_reader(f)?) } -fn main() { - create_contacts(); +fn main() -> Result<(), Box> { + env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")).init(); + create_contacts()?; + let contacts = load_contacts()?; + log::info!("deserialized: {:?}", &contacts); + Ok(()) }