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