3 use serde::{Serialize, Deserialize};
5 const DB_PATH: &str = "/tmp/contacts.json";
7 #[derive(Serialize, Deserialize, Debug)]
14 #[derive(Serialize, Deserialize, Debug)]
21 type Contacts = Vec<Contact>;
23 fn build_contacts() -> Contacts {
25 Contact { name: "John".to_string(), phone: 12345, social: Social::Twitter("@the_john".to_string()) },
26 Contact { name: "Mary".to_string(), phone: 9876543, social: Social::ICQ(111234) },
27 Contact { name: "Jane".to_string(), phone: 555555, social: Social::Nothing },
31 fn create_contacts() -> Result<(), Box<dyn Error>> {
32 let contacts = build_contacts();
33 let serialized = serde_json::to_string(&contacts)?;
34 println!("serialized: {}", serialized);
35 let mut f = fs::File::create(DB_PATH)?;
36 serde_json::to_writer_pretty(&mut f, &contacts)?;
40 fn load_contacts() -> Result<Contacts, Box<dyn Error>> {
41 let f = fs::File::open(DB_PATH)?;
42 Ok(serde_json::from_reader(f)?)
45 fn main() -> Result<(), Box<dyn Error>> {
47 let contacts = load_contacts()?;
48 println!("deserialized: {:?}", contacts);