]> piware.de Git - learn-rust.git/blobdiff - serde/src/main.rs
serde: Read back from file and deserialize
[learn-rust.git] / serde / src / main.rs
index 0c9efe90216132d2a0ff01f57352f24279c3aa07..8579522182ceacb24bf35ed9b3471f66c9d11259 100644 (file)
@@ -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<dyn Error>> {
     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<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>> {
+    create_contacts()?;
+    let contacts = load_contacts()?;
+    println!("deserialized: {:?}", contacts);
+    Ok(())
 }