#[macro_use] extern crate serde_derive; #[cfg(feature = "std")] mod std_tests { use serde_cbor; use std::collections::BTreeMap; #[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] struct TupleStruct(String, i32, u64); #[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] struct UnitStruct; #[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] struct Struct<'a> { tuple_struct: TupleStruct, tuple: (String, f32, f64), map: BTreeMap, bytes: &'a [u8], array: Vec, unit_array: Vec, } use serde_cbor::value::Value; use std::iter::FromIterator; #[test] fn serde() { let tuple_struct = TupleStruct(format!("test"), -60, 3000); let tuple = (format!("hello"), -50.0040957, -12.094635556478); let map = BTreeMap::from_iter( [ (format!("key1"), format!("value1")), (format!("key2"), format!("value2")), (format!("key3"), format!("value3")), (format!("key4"), format!("value4")), ] .iter() .cloned(), ); let bytes = b"test byte string"; let array = vec![format!("one"), format!("two"), format!("three")]; let unit_array = vec![UnitStruct, UnitStruct, UnitStruct]; let data = Struct { tuple_struct, tuple, map, bytes, array, unit_array, }; let value = serde_cbor::value::to_value(data.clone()).unwrap(); println!("{:?}", value); let data_ser = serde_cbor::to_vec(&value).unwrap(); let data_de_value: Value = serde_cbor::from_slice(&data_ser).unwrap(); fn as_object(value: &Value) -> &BTreeMap { if let Value::Map(ref v) = value { return v; } panic!() } for ((k1, v1), (k2, v2)) in as_object(&value) .iter() .zip(as_object(&data_de_value).iter()) { assert_eq!(k1, k2); assert_eq!(v1, v2); } assert_eq!(value, data_de_value); } #[derive(Debug, Deserialize, Serialize)] struct SmallStruct { spam: u32, eggs: u32, } #[test] fn small_struct() { // Test whether the packed format works. // Field names should not be serialized, // instead field indizes are serialized. let value = SmallStruct { spam: 17, eggs: 42 }; let data = serde_cbor::ser::to_vec_packed(&value).unwrap(); let reference = b"\xa2\x00\x11\x01\x18\x2a"; assert_eq!(data, reference); } }