use crate::spec::{MaskSpec, Node};
use std::collections::BTreeMap;
macro_rules! impl_scalar {
($t:ty $(,)?) => {
impl MaskSpec for $t {
fn mask_spec() -> &'static Node {
static N: Node = Node::scalar();
&N
}
}
};
}
impl_scalar!(bool);
impl_scalar!(i8);
impl_scalar!(i16);
impl_scalar!(i32);
impl_scalar!(i64);
impl_scalar!(isize);
impl_scalar!(u8);
impl_scalar!(u16);
impl_scalar!(u32);
impl_scalar!(u64);
impl_scalar!(usize);
impl_scalar!(f32);
impl_scalar!(f64);
impl_scalar!(String);
impl_scalar!(&str);
impl<T: MaskSpec> MaskSpec for Option<T> {
fn mask_spec() -> &'static Node {
T::mask_spec()
}
}
impl<T: MaskSpec> MaskSpec for Box<T> {
fn mask_spec() -> &'static Node {
T::mask_spec()
}
}
impl<T: MaskSpec> MaskSpec for Vec<T> {
fn mask_spec() -> &'static Node {
Box::leak(Box::new(Node::array(T::mask_spec().clone())))
}
}
impl<V: MaskSpec> MaskSpec for std::collections::HashMap<String, V> {
fn mask_spec() -> &'static Node {
Box::leak(Box::new(Node::map(V::mask_spec().clone())))
}
}
impl<V: MaskSpec> MaskSpec for BTreeMap<String, V> {
fn mask_spec() -> &'static Node {
Box::leak(Box::new(Node::map(V::mask_spec().clone())))
}
}
#[cfg(feature = "hashbrown")]
impl<V: MaskSpec> MaskSpec for hashbrown::HashMap<String, V> {
fn mask_spec() -> &'static Node {
Box::leak(Box::new(Node::map(V::mask_spec().clone())))
}
}