oak_json/ast/
mod.rs

1use core::range::Range;
2use serde::{Deserialize, Serialize};
3
4/// JSON AST 根节点
5#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
6pub struct JsonRoot {
7    pub value: JsonValue,
8}
9
10#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
11pub enum JsonValue {
12    Object(JsonObject),
13    Array(JsonArray),
14    String(JsonString),
15    Number(JsonNumber),
16    Boolean(JsonBoolean),
17    Null(JsonNull),
18}
19
20#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
21pub struct JsonObject {
22    pub fields: Vec<JsonField>,
23    #[serde(with = "oak_core::serde_range")]
24    pub span: Range<usize>,
25}
26
27#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
28pub struct JsonField {
29    pub name: JsonString,
30    pub value: JsonValue,
31    #[serde(with = "oak_core::serde_range")]
32    pub span: Range<usize>,
33}
34
35#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
36pub struct JsonArray {
37    pub elements: Vec<JsonValue>,
38    #[serde(with = "oak_core::serde_range")]
39    pub span: Range<usize>,
40}
41
42#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
43pub struct JsonString {
44    pub value: String,
45    #[serde(with = "oak_core::serde_range")]
46    pub span: Range<usize>,
47}
48
49#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
50pub struct JsonNumber {
51    pub value: f64,
52    #[serde(with = "oak_core::serde_range")]
53    pub span: Range<usize>,
54}
55
56#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
57pub struct JsonBoolean {
58    pub value: bool,
59    #[serde(with = "oak_core::serde_range")]
60    pub span: Range<usize>,
61}
62
63#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
64pub struct JsonNull {
65    #[serde(with = "oak_core::serde_range")]
66    pub span: Range<usize>,
67}