valued 0.1.1

Describe your data in terms of basic data structures. Get serialization and other facilities for free
Documentation
use bigdecimal::BigDecimal;
use std::hash::Hash;

#[derive(Debug, Clone, Hash, Eq, PartialEq)]
#[non_exhaustive]
pub enum Primitive {
    String(String),
    U64(u64),
    I64(i64),
    Decimal(BigDecimal),
}

macro_rules! primitive {
    (Primitive::$to:ident from $($from:ty),* $(,)?) => {
        $(
            impl From<$from> for Primitive {
                fn from(from: $from) -> Self {
                    Primitive::$to(from.into())
                }
            }

            impl From<$from> for $crate::Value {
                fn from(from: $from) -> Self {
                    $crate::Value::Primitive(from.into())
                }
            }

            impl $crate::SerializeAs for $from {
                fn serialize_from(self) -> crate::Value {
                    $crate::Value::Primitive(self.into())
                }
            }
        )*
    };
}

primitive!(Primitive::String from &str, &String, String);
primitive!(Primitive::U64 from u32, u64);
primitive!(Primitive::I64 from i32, i64);
primitive!(Primitive::Decimal from BigDecimal);