1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
#[macro_use] extern crate serde; #[cfg(test)] #[macro_use] extern crate serde_derive; extern crate base64; extern crate failure; extern crate ordered_float; extern crate try_from; pub mod de; pub mod error; mod number; pub mod ser; mod string; pub mod value; pub use de::from_str; pub use error::Error; pub use ser::to_string; pub type Result<T> = std::result::Result<T, Error>; #[cfg(test)] mod tests { use from_str; use to_string; #[test] fn test_basic() { #[derive(Serialize, Deserialize, Debug, PartialEq, Eq)] struct Person { name: String, age: u32, } let person = Person { name: "dankogai".into(), age: 48, }; let expected = r#"["name":"dankogai","age":48]"#; assert_eq!(to_string(&person).unwrap(), expected); let deserialized = from_str::<Person>(expected).unwrap(); assert_eq!(deserialized, person); } #[test] fn test_compound() { use std::collections::HashMap; #[derive(Serialize, Deserialize, Debug, PartialEq, Eq)] struct Language { name: String, tag: Vec<String>, } let mut compilers = HashMap::new(); compilers.insert( "rustc".into(), Language { name: "Rust".into(), tag: vec!["system programming".into(), "Mozilla".into()], }, ); compilers.insert( "clang".into(), Language { name: "C++".into(), tag: vec![], }, ); let serialized = to_string(&compilers).unwrap(); let deserialized: HashMap<String, Language> = from_str(&serialized).unwrap(); assert_eq!(deserialized, compilers); } }