use crate::types::Span;
#[derive(Debug, Clone, PartialEq)]
pub struct KeyValuePair {
pub key: String,
pub value: JsonNode,
}
#[derive(Debug, Clone, PartialEq)]
pub enum JsonNode {
Null(Span),
Bool(bool, Span),
Number(f64, String, Span),
String(String, Span),
Array(Vec<JsonNode>, Span),
Object(Vec<KeyValuePair>, Span),
}
impl JsonNode {
pub fn node_type(&self) -> String {
match self {
JsonNode::Null(_) => "null".to_string(),
JsonNode::Bool(_, _) => "bool".to_string(),
JsonNode::Number(_, _, _) => "number".to_string(),
JsonNode::String(_, _) => "string".to_string(),
JsonNode::Array(_, _) => "array".to_string(),
JsonNode::Object(_, _) => "object".to_string(),
}
}
pub fn span(&self) -> Span {
match self {
JsonNode::Null(span) => span.clone(),
JsonNode::Bool(_, span) => span.clone(),
JsonNode::Number(_, _, span) => span.clone(),
JsonNode::String(_, span) => span.clone(),
JsonNode::Array(_, span) => span.clone(),
JsonNode::Object(_, span) => span.clone(),
}
}
}