mod conversions;
mod key;
mod key_e;
mod map;
mod map_ref;
mod val;
mod val_e;
mod val_ref;
pub use key::Key;
pub use map::{Map, ValMapEntries};
pub use val::Val;
pub use val_e::ValE;
pub use val_ref::ValRef;
mod slim_boxed_slice;
mod tiny_string;
mod from_other;
mod to_other;
pub use from_other::to_val;
pub use to_other::{deserializer::ValDeserializerError, from_val};
#[cfg(test)]
mod test {
use ordered_float::NotNan;
use crate::{
key_e::KeyE,
map_ref::MapRef,
slim_boxed_slice::{SlimBoxedSlice, SlimBoxedString},
tiny_string::TinyString,
Val, ValE, ValRef,
};
#[test]
fn primtives_roundtrip() {
let val: Val = ValE::Null.into();
println!("{:?}", val);
assert_eq!(val.direct_ref(), ValRef::Null);
assert_eq!(Into::<ValE>::into(val), ValE::Null);
let val: Val = ValE::Bool(true).into();
println!("{:?}", val);
assert_eq!(val.direct_ref(), ValRef::Bool(true));
assert_eq!(Into::<ValE>::into(val), ValE::Bool(true));
let val: Val = ValE::Bool(false).into();
println!("{:?}", val);
assert_eq!(val.direct_ref(), ValRef::Bool(false));
assert_eq!(Into::<ValE>::into(val), ValE::Bool(false));
let val: Val = ValE::Number(NotNan::new(0.0).unwrap()).into();
println!("{:?}", val);
assert_eq!(val.direct_ref(), ValRef::Number(NotNan::new(0.0).unwrap()));
assert_eq!(
Into::<ValE>::into(val),
ValE::Number(NotNan::new(0.0).unwrap())
);
let val: Val = ValE::ShortString(TinyString::try_from("Hello").unwrap()).into();
println!("{:?}", val);
assert_eq!(val.direct_ref(), ValRef::String("Hello"));
assert_eq!(
Into::<ValE>::into(val),
ValE::ShortString(TinyString::try_from("Hello").unwrap())
);
let val: Val = ValE::LongString(SlimBoxedString::from_str("Hello, world")).into();
println!("{:?}", val);
assert_eq!(val.direct_ref(), ValRef::String("Hello, world"));
assert_eq!(
Into::<ValE>::into(val),
ValE::LongString(SlimBoxedString::from_str("Hello, world"))
);
let val: Val = ValE::Array(SlimBoxedSlice::from_vec(vec![
ValE::Bool(true).into(),
ValE::Number(NotNan::new(42.0).unwrap()).into(),
]))
.into();
println!("{:?}", val);
assert_eq!(
val.direct_ref(),
ValRef::Array(&[
ValE::Bool(true).into(),
ValE::Number(NotNan::new(42.0).unwrap()).into(),
])
);
assert_eq!(
Into::<ValE>::into(val),
ValE::Array(SlimBoxedSlice::from_vec(vec![
ValE::Bool(true).into(),
ValE::Number(NotNan::new(42.0).unwrap()).into(),
]))
);
let val: Val = Val::object(vec![
("a", ValE::Bool(true)),
("b", ValE::Number(NotNan::new(42.0).unwrap())),
]);
println!("{:?}", val);
assert_eq!(
val.direct_ref(),
ValRef::Object(MapRef(&[
(KeyE::str("a").into(), ValE::Bool(true).into()),
(
KeyE::str("b").into(),
ValE::Number(NotNan::new(42.0).unwrap()).into(),
),
]))
);
assert_eq!(
Into::<ValE>::into(val),
Val::object(vec![
("a", ValE::Bool(true)),
("b", ValE::Number(NotNan::new(42.0).unwrap()),),
])
.into()
);
}
}