X-Git-Url: https://piware.de/gitweb/?p=learn-rust.git;a=blobdiff_plain;f=serde%2Fsrc%2Fmain.rs;h=8579522182ceacb24bf35ed9b3471f66c9d11259;hp=0c9efe90216132d2a0ff01f57352f24279c3aa07;hb=68bc0a2a4326ea89f01c90ab909095ded5e087a4;hpb=6b86f7f9dc3b179a09341af581e7af8b518beedc diff --git a/serde/src/main.rs b/serde/src/main.rs index 0c9efe9..8579522 100644 --- a/serde/src/main.rs +++ b/serde/src/main.rs @@ -1,5 +1,9 @@ +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), @@ -24,13 +28,23 @@ 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(); + let serialized = serde_json::to_string(&contacts)?; println!("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> { + create_contacts()?; + let contacts = load_contacts()?; + println!("deserialized: {:?}", contacts); + Ok(()) }