1mod conversions;
2mod key;
3mod key_e;
4mod map;
5mod map_ref;
6mod val;
7mod val_e;
8mod val_ref;
9pub use key::Key;
10pub use map::{Map, ValMapEntries};
11pub use val::Val;
12pub use val_e::ValE;
13pub use val_ref::ValRef;
14
15mod slim_boxed_slice;
16mod tiny_string;
17
18mod from_other;
19mod to_other;
20
21pub use from_other::to_val;
22pub use to_other::{deserializer::ValDeserializerError, from_val};
23
24#[cfg(test)]
25mod test {
26 use ordered_float::NotNan;
27
28 use crate::{
29 key_e::KeyE,
30 map_ref::MapRef,
31 slim_boxed_slice::{SlimBoxedSlice, SlimBoxedString},
32 tiny_string::TinyString,
33 Val, ValE, ValRef,
34 };
35
36 #[test]
37 fn primtives_roundtrip() {
38 let val: Val = ValE::Null.into();
39 println!("{:?}", val);
40 assert_eq!(val.direct_ref(), ValRef::Null);
41 assert_eq!(Into::<ValE>::into(val), ValE::Null);
42
43 let val: Val = ValE::Bool(true).into();
44 println!("{:?}", val);
45 assert_eq!(val.direct_ref(), ValRef::Bool(true));
46 assert_eq!(Into::<ValE>::into(val), ValE::Bool(true));
47
48 let val: Val = ValE::Bool(false).into();
49 println!("{:?}", val);
50 assert_eq!(val.direct_ref(), ValRef::Bool(false));
51 assert_eq!(Into::<ValE>::into(val), ValE::Bool(false));
52
53 let val: Val = ValE::Number(NotNan::new(0.0).unwrap()).into();
54 println!("{:?}", val);
55 assert_eq!(val.direct_ref(), ValRef::Number(NotNan::new(0.0).unwrap()));
56 assert_eq!(
57 Into::<ValE>::into(val),
58 ValE::Number(NotNan::new(0.0).unwrap())
59 );
60
61 let val: Val = ValE::ShortString(TinyString::try_from("Hello").unwrap()).into();
62 println!("{:?}", val);
63 assert_eq!(val.direct_ref(), ValRef::String("Hello"));
64 assert_eq!(
65 Into::<ValE>::into(val),
66 ValE::ShortString(TinyString::try_from("Hello").unwrap())
67 );
68
69 let val: Val = ValE::LongString(SlimBoxedString::from_str("Hello, world")).into();
70 println!("{:?}", val);
71 assert_eq!(val.direct_ref(), ValRef::String("Hello, world"));
72 assert_eq!(
73 Into::<ValE>::into(val),
74 ValE::LongString(SlimBoxedString::from_str("Hello, world"))
75 );
76
77 let val: Val = ValE::Array(SlimBoxedSlice::from_vec(vec![
78 ValE::Bool(true).into(),
79 ValE::Number(NotNan::new(42.0).unwrap()).into(),
80 ]))
81 .into();
82 println!("{:?}", val);
83 assert_eq!(
84 val.direct_ref(),
85 ValRef::Array(&[
86 ValE::Bool(true).into(),
87 ValE::Number(NotNan::new(42.0).unwrap()).into(),
88 ])
89 );
90 assert_eq!(
91 Into::<ValE>::into(val),
92 ValE::Array(SlimBoxedSlice::from_vec(vec![
93 ValE::Bool(true).into(),
94 ValE::Number(NotNan::new(42.0).unwrap()).into(),
95 ]))
96 );
97
98 let val: Val = Val::object(vec![
99 ("a", ValE::Bool(true)),
100 ("b", ValE::Number(NotNan::new(42.0).unwrap())),
101 ]);
102 println!("{:?}", val);
103 assert_eq!(
104 val.direct_ref(),
105 ValRef::Object(MapRef(&[
106 (KeyE::str("a").into(), ValE::Bool(true).into()),
107 (
108 KeyE::str("b").into(),
109 ValE::Number(NotNan::new(42.0).unwrap()).into(),
110 ),
111 ]))
112 );
113 assert_eq!(
114 Into::<ValE>::into(val),
115 Val::object(vec![
116 ("a", ValE::Bool(true)),
117 ("b", ValE::Number(NotNan::new(42.0).unwrap()),),
118 ])
119 .into()
120 );
121 }
122}