1pub mod de;
8pub mod error;
9pub mod ser;
10pub mod token;
11
12pub use error::Error;
13pub use token::Token;
14
15use de::TokenDeserializer;
16use ser::TokenSerializer;
17
18use forma_core::de::Deserialize;
19use forma_core::ser::Serialize;
20
21pub fn assert_ser_tokens<T: Serialize + ?Sized>(value: &T, expected: &[Token]) {
25 let mut s = TokenSerializer::new();
26 value.serialize(&mut s).expect("serialization failed");
27 let actual = s.into_tokens();
28 assert!(
29 actual == expected,
30 "serialization mismatch:\n actual: {actual:?}\n expected: {expected:?}"
31 );
32}
33
34pub fn assert_de_tokens<'de, T>(expected: &T, tokens: &'de [Token])
38where
39 T: Deserialize<'de> + PartialEq + std::fmt::Debug,
40{
41 let mut de = TokenDeserializer::new(tokens);
42 let actual = T::deserialize(&mut de).expect("deserialization failed");
43 assert_eq!(
44 de.remaining(),
45 0,
46 "not all tokens consumed ({} remaining)",
47 de.remaining()
48 );
49 assert!(
50 actual == *expected,
51 "deserialization mismatch:\n actual: {actual:?}\n expected: {expected:?}"
52 );
53}
54
55pub fn assert_tokens<'de, T>(value: &T, tokens: &'de [Token])
60where
61 T: Serialize + Deserialize<'de> + PartialEq + std::fmt::Debug,
62{
63 assert_ser_tokens(value, tokens);
64 assert_de_tokens(value, tokens);
65}
66
67pub fn assert_de_tokens_error<'de, T>(tokens: &'de [Token], expected_msg: &str)
70where
71 T: Deserialize<'de> + std::fmt::Debug,
72{
73 let mut de = TokenDeserializer::new(tokens);
74 match T::deserialize(&mut de) {
75 Ok(v) => panic!("expected error containing {expected_msg:?}, but deserialization succeeded with {v:?}"),
76 Err(e) => {
77 let msg = e.0;
78 assert!(
79 msg.contains(expected_msg),
80 "error message mismatch:\n actual: {msg:?}\n expected to contain: {expected_msg:?}"
81 );
82 }
83 }
84}