litl_val/
lib.rs

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}