use compact_str::CompactString;
use super::object_map::ObjectMap;
pub type Scalar = CompactString;
#[derive(Debug, Clone, PartialEq)]
pub enum Value {
Null,
Bool(bool),
Integer(Scalar),
Float(Scalar),
String(Scalar),
Array(Vec<Value>),
Object(ObjectMap),
}
impl Value {
pub fn is_null(&self) -> bool {
matches!(self, Value::Null)
}
pub fn as_bool(&self) -> Option<bool> {
if let Value::Bool(b) = self {
Some(*b)
} else {
None
}
}
pub fn as_str(&self) -> Option<&str> {
if let Value::String(s) = self {
Some(s)
} else {
None
}
}
pub fn as_integer(&self) -> Option<&str> {
if let Value::Integer(s) = self {
Some(s)
} else {
None
}
}
pub fn as_float(&self) -> Option<&str> {
if let Value::Float(s) = self {
Some(s)
} else {
None
}
}
pub fn as_array(&self) -> Option<&Vec<Value>> {
if let Value::Array(a) = self {
Some(a)
} else {
None
}
}
pub fn as_object(&self) -> Option<&ObjectMap> {
if let Value::Object(o) = self {
Some(o)
} else {
None
}
}
}