use std::collections::BTreeMap;
#[derive(Clone, PartialEq)]
pub enum Value {
Bool(bool),
Integer(i64),
Float(f64),
String(String),
List(Vec<Value>),
Dict(BTreeMap<String, Value>),
}
impl Value {
pub fn is_bool(&self) -> bool {
match self {
&Value::Bool(_) => true,
_ => false,
}
}
pub fn as_bool(&self) -> Option<bool> {
match self {
&Value::Bool(b) => Some(b),
_ => None,
}
}
pub fn is_integer(&self) -> bool {
match self {
&Value::Integer(_) => true,
_ => false,
}
}
pub fn as_integer(&self) -> Option<i64> {
match self {
&Value::Integer(i) => Some(i),
_ => None,
}
}
pub fn is_float(&self) -> bool {
match self {
&Value::Float(_) => true,
_ => false,
}
}
pub fn as_float(&self) -> Option<f64> {
match self {
&Value::Float(f) => Some(f),
_ => None,
}
}
pub fn is_number(&self) -> bool {
match self {
&Value::Integer(_) => true,
&Value::Float(_) => true,
_ => false,
}
}
pub fn as_number(&self) -> Option<f64> {
match self {
&Value::Integer(i) => Some(i as f64),
&Value::Float(f) => Some(f),
_ => None,
}
}
pub fn is_string(&self) -> bool {
match self {
&Value::String(_) => true,
_ => false,
}
}
pub fn as_string(&self) -> Option<&str> {
match self {
&Value::String(ref s) => Some(s),
_ => None,
}
}
pub fn is_list(&self) -> bool {
match self {
&Value::List(_) => true,
_ => false,
}
}
pub fn as_list(&self) -> Option<&Vec<Value>> {
match self {
&Value::List(ref l) => Some(l),
_ => None,
}
}
pub fn is_dict(&self) -> bool {
match self {
&Value::Dict(_) => true,
_ => false,
}
}
pub fn as_dict(&self) -> Option<&BTreeMap<String, Value>> {
match self {
&Value::Dict(ref d) => Some(d),
_ => None,
}
}
}