use indexmap::IndexMap;
use crate::value::Value;
#[derive(Clone, Debug, PartialEq)]
pub(crate) enum Node {
Undefined,
Value(Value),
Array(Vec<Node>),
Object(IndexMap<String, Node>),
OverflowObject {
entries: IndexMap<String, Node>,
max_index: usize,
},
}
impl Node {
pub(crate) fn scalar(value: Value) -> Self {
debug_assert!(value.is_scalar());
Self::Value(value)
}
pub(crate) fn is_undefined(&self) -> bool {
matches!(self, Self::Undefined)
}
pub(crate) fn is_null_source(&self) -> bool {
matches!(self, Self::Value(Value::Null))
}
pub(crate) fn is_map_like(&self) -> bool {
matches!(self, Self::Object(_) | Self::OverflowObject { .. })
}
}