use std::borrow::Cow; use std::collections::BTreeSet; use deser::ser::SerializeDriver; use deser::{Atom, Event, Serialize}; fn capture_events(s: &dyn Serialize) -> Vec> { let mut events = Vec::new(); let mut driver = SerializeDriver::new(s); while let Some((event, _, _)) = driver.next().unwrap() { events.push(event.to_static()); } events } #[test] fn test_optional() { let events = capture_events(&None::); assert_eq!(events, vec![Event::Atom(Atom::Null)]); let events = capture_events(&Some(42usize)); assert_eq!(events, vec![Event::Atom(Atom::U64(42))]); } #[test] fn test_tuples() { let events = capture_events(&(1, 2, 3)); assert_eq!( events, vec![ Event::SeqStart, 1i64.into(), 2i64.into(), 3i64.into(), Event::SeqEnd, ] ); } #[test] fn test_unit() { let events = capture_events(&()); assert_eq!(events, vec![Event::Atom(Atom::Null)]); } #[test] fn test_array() { let events = capture_events(&[1i64, 2, 3, 4]); assert_eq!( events, vec![ Event::SeqStart, 1i64.into(), 2i64.into(), 3i64.into(), 4i64.into(), Event::SeqEnd ] ); let events = capture_events(b"Hello"); assert_eq!( events, vec![Event::Atom(Atom::Bytes(Cow::Borrowed(b"Hello")))] ); } #[test] fn test_chars() { let events = capture_events(&'x'); assert_eq!(events, vec!['x'.into()]); } #[test] fn test_refs() { let events = capture_events(&&&&42u64); assert_eq!(events, vec![42u64.into()]); } #[test] fn test_box() { let events = capture_events(&Box::new(true)); assert_eq!(events, vec![true.into()]); } #[test] fn test_set() { let mut set = BTreeSet::new(); set.insert("foo"); set.insert("bar"); let events = capture_events(&set); assert_eq!( events, vec![Event::SeqStart, "bar".into(), "foo".into(), Event::SeqEnd] ); }