use std::collections::BTreeMap;
#[derive(Clone)]
pub(crate) enum Kind {
Scalar,
Object(BTreeMap<String, Node>),
Array(Box<Node>),
Map(Box<Node>),
}
#[derive(Clone)]
pub struct Node {
pub(crate) kind: Kind,
}
impl Node {
pub const fn scalar() -> Self {
Self { kind: Kind::Scalar }
}
pub fn object(fields: impl IntoIterator<Item = (impl Into<String>, Node)>) -> Self {
Self {
kind: Kind::Object(fields.into_iter().map(|(k, v)| (k.into(), v)).collect()),
}
}
pub fn array(elem: Node) -> Self {
Self {
kind: Kind::Array(Box::new(elem)),
}
}
pub fn map(val: Node) -> Self {
Self {
kind: Kind::Map(Box::new(val)),
}
}
}