]> piware.de Git - learn-rust.git/commitdiff
serde: Read back from file and deserialize
authorMartin Pitt <martin@piware.de>
Sat, 25 Sep 2021 10:22:27 +0000 (12:22 +0200)
committerMartin Pitt <martin@piware.de>
Sat, 25 Sep 2021 10:22:27 +0000 (12:22 +0200)
serde/src/main.rs

index 335f836a7b9456ff16e9ade08b57e0f0bb8f27b2..8579522182ceacb24bf35ed9b3471f66c9d11259 100644 (file)
@@ -2,6 +2,8 @@ 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),
@@ -30,12 +32,19 @@ fn create_contacts() -> Result<(), Box<dyn Error>> {
     let contacts = build_contacts();
     let serialized = serde_json::to_string(&contacts)?;
     println!("serialized: {}", serialized);
-    let mut f = fs::File::create("/tmp/contacts.json")?;
+    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() -> Result<(), Box<dyn Error>> {
     create_contacts()?;
+    let contacts = load_contacts()?;
+    println!("deserialized: {:?}", contacts);
     Ok(())
 }