1use core::range::Range;
2use serde::{Deserialize, Serialize};
3
4#[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}