use crate::tag::Tag;
#[derive(Debug, Clone, PartialEq)]
#[non_exhaustive]
pub enum Value {
Bool(bool),
Uint(u64),
Int(i64),
Float(f32),
Double(f64),
Utf8(String),
Bytes(Vec<u8>),
Structure(Vec<(Tag, Value)>),
Array(Vec<Value>),
List(Vec<(Tag, Value)>),
Null,
}
#[derive(Debug, Clone, Copy, PartialEq)]
#[non_exhaustive]
pub enum ValueRef<'a> {
Bool(bool),
Uint(u64),
Int(i64),
Float(f32),
Double(f64),
Utf8(&'a str),
Bytes(&'a [u8]),
Null,
}
impl From<ValueRef<'_>> for Value {
#[inline]
fn from(v: ValueRef<'_>) -> Self {
match v {
ValueRef::Bool(b) => Value::Bool(b),
ValueRef::Uint(n) => Value::Uint(n),
ValueRef::Int(n) => Value::Int(n),
ValueRef::Float(f) => Value::Float(f),
ValueRef::Double(f) => Value::Double(f),
ValueRef::Utf8(s) => Value::Utf8(String::from(s)),
ValueRef::Bytes(b) => Value::Bytes(b.to_vec()),
ValueRef::Null => Value::Null,
}
}
}