]> piware.de Git - learn-rust.git/blobdiff - serde/src/main.rs
serde: Use log framework
[learn-rust.git] / serde / src / main.rs
index 0c9efe90216132d2a0ff01f57352f24279c3aa07..fc88d23c418c5872db2d7df475506038a1644949 100644 (file)
@@ -1,5 +1,10 @@
+use std::fs;
+use std::error::Error;
+
 use serde::{Serialize, Deserialize};
 
 use serde::{Serialize, Deserialize};
 
+const DB_PATH: &str = "/tmp/contacts.json";
+
 #[derive(Serialize, Deserialize, Debug)]
 enum Social {
     Twitter(String),
 #[derive(Serialize, Deserialize, Debug)]
 enum Social {
     Twitter(String),
@@ -24,13 +29,24 @@ fn build_contacts() -> Contacts {
     ]
 }
 
     ]
 }
 
-fn create_contacts() {
+fn create_contacts() -> Result<(), Box<dyn Error>> {
     let contacts = build_contacts();
     let contacts = build_contacts();
-    // FIXME: Use ? and return Result
-    let serialized = serde_json::to_string(&contacts).unwrap();
-    println!("serialized: {}", serialized);
+    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<Contacts, Box<dyn Error>> {
+    let f = fs::File::open(DB_PATH)?;
+    Ok(serde_json::from_reader(f)?)
 }
 
 }
 
-fn main() {
-    create_contacts();
+fn main() -> Result<(), Box<dyn Error>> {
+    env_logger::init();
+    create_contacts()?;
+    let contacts = load_contacts()?;
+    println!("deserialized: {:?}", &contacts);
+    Ok(())
 }
 }