dare 0.0.3

daring flexible data representation
Documentation
#[doc(hidden)]
#[macro_export]
macro_rules! _impl_from_for_value {
    ($($t:ty => $variant:ident),+) => {
        $(
            impl From<$t> for Value {
                fn from(item: $t) -> Self {
                    Value::$variant(item.into())
                }
            }
        )+

        #[cfg(not(feature = "serde"))]
        impl From<&'static [Value]> for Value {
            fn from(item: &'static [Value]) -> Self {
                Value::Slice(item)
            }
        }
    };
}

#[doc(hidden)]
#[macro_export]
macro_rules! _impl_value_methods {
    ($($variant:ident => $type:ty, $as_method:ident, $is_method:ident);+ $(;)?) => {
        impl Value {
            $(
                pub fn $is_method(&self) -> bool {
                    matches!(self, Value::$variant(_))
                }

                pub fn $as_method(&self) -> Option<$type> {
                    match self {
                        Value::$variant(v) => Some(v.clone()),
                        _ => None,
                    }
                }
            )+

            #[cfg(not(feature = "serde"))]
            pub fn as_slice(&self) -> Option<&'static [Value]> {
                match self {
                    Value::Slice(v) => Some(v),
                    _ => None,
                }
            }

            #[cfg(not(feature = "serde"))]
            pub fn is_slice(&self) -> bool {
                matches!(self, Value::Slice(_))
            }

            pub fn to_value(self) -> Value {
                self
            }

            pub fn is_null(&self) -> bool {
                matches!(self, Value::Null)
            }
        }
    };
}

#[doc(inline)]
pub use _impl_from_for_value as impl_for;

#[doc(inline)]
pub use _impl_value_methods as impl_methods;