use crate::common::symbol::Symbol;
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum Value {
Int(i64),
Float(f64),
String(Symbol),
Boolean(bool),
BitString(Symbol),
HexString(Symbol),
Null,
}
impl Value {
pub fn as_int(&self) -> i64 {
match self {
Value::Int(n) => *n,
_ => panic!("not an int"),
}
}
pub fn as_int_opt(&self) -> Option<i64> {
match self {
Value::Int(n) => Some(*n),
Value::Null => None,
_ => panic!("not an int/null"),
}
}
pub fn as_sym(&self) -> crate::common::symbol::Symbol {
match self {
Value::String(s) => *s,
_ => panic!("not a string"),
}
}
pub fn as_sym_opt(&self) -> Option<crate::common::symbol::Symbol> {
match self {
Value::String(s) => Some(*s),
Value::Null => None,
_ => panic!("not a string/null"),
}
}
pub fn as_bool(&self) -> bool {
match self {
Value::Boolean(b) => *b,
_ => panic!("not a bool"),
}
}
}