use std::fmt;
pub type Range = std::ops::Range<usize>;
pub type Key<'a> = &'a str;
#[derive(Debug, PartialEq)]
pub enum Value {
InnerList,
String { range: Range, escape: bool },
Token(Range),
Integer(i64),
Decimal { numer: i64, denom: i64 },
Date(i64),
ByteSeq(Range),
Bool(bool),
DispString(Range),
}
impl fmt::Display for Value {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Value::InnerList => {
write!(f, "<InnerList>")
}
Value::String { range, escape } => {
write!(f, "<String>{{{range:#?} escape={escape}}}",)
}
Value::Token(range) => {
write!(f, "<Token>{{{range:#?}}}")
}
Value::Integer(v) => {
write!(f, "<Integer>{{{v}}}")
}
Value::Decimal { numer, denom } => {
write!(f, "<Decimal>{{{numer}/{denom}}}")
}
Value::Date(v) => {
write!(f, "<Date>{{{v}}}")
}
Value::ByteSeq(range) => {
write!(f, "<ByteSeq>{{{range:#?}}}")
}
Value::Bool(v) => {
write!(f, "<Bool>{{{v}}}")
}
Value::DispString(range) => {
write!(f, "<DispString>{{{range:#?}}}")
}
}
}
}