serde: Write JSON to file
[learn-rust.git] / serde / src / main.rs
1 use std::fs;
2 use serde::{Serialize, Deserialize};
3
4 #[derive(Serialize, Deserialize, Debug)]
5 enum Social {
6     Twitter(String),
7     ICQ(u64),
8     Nothing,
9 }
10
11 #[derive(Serialize, Deserialize, Debug)]
12 struct Contact {
13     name: String,
14     phone: u32,
15     social: Social,
16 }
17
18 type Contacts = Vec<Contact>;
19
20 fn build_contacts() -> Contacts {
21     vec![
22         Contact { name: "John".to_string(), phone: 12345, social: Social::Twitter("@the_john".to_string()) },
23         Contact { name: "Mary".to_string(), phone: 9876543, social: Social::ICQ(111234) },
24         Contact { name: "Jane".to_string(), phone: 555555, social: Social::Nothing },
25     ]
26 }
27
28 fn create_contacts() {
29     let contacts = build_contacts();
30     // FIXME: Use ? and return Result
31     let serialized = serde_json::to_string(&contacts).unwrap();
32     println!("serialized: {}", serialized);
33     let mut f = fs::File::create("/tmp/contacts.json").unwrap_or_else(|e| panic!("Could not create /tmp/contacts.json: {:?}", e));
34     serde_json::to_writer_pretty(&mut f, &contacts).unwrap_or_else(|e| panic!("Could not serialize contacts: {:?}", e));
35 }
36
37 fn main() {
38     create_contacts();
39 }