momoa 3.2.0

A JSON parsing library suitable for static analysis
Documentation
use crate::location::*;
use crate::tokens::Token;
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum Node {
    Document(Box<DocumentNode>),
    String(Box<ValueNode<String>>),
    Number(Box<ValueNode<f64>>),
    Boolean(Box<ValueNode<bool>>),
    Null(Box<NullNode>),
    Array(Box<ArrayNode>),
    Object(Box<ObjectNode>),
    Member(Box<MemberNode>),
    Element(Box<ValueNode<Node>>),
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ValueNode<T> {
    pub value: T,
    pub loc: LocationRange,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ObjectNode {
    pub members: Vec<Node>,
    pub loc: LocationRange,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ArrayNode {
    pub elements: Vec<Node>,
    pub loc: LocationRange,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct MemberNode {
    pub name: Node,
    pub value: Node,
    pub loc: LocationRange,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ElementNode {
    pub value: Node,
    pub loc: LocationRange,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct NullNode {
    pub loc: LocationRange,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct DocumentNode {
    pub body: Node,
    pub loc: LocationRange,
    pub tokens: Vec<Token>,
}