1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use std::collections::HashMap;

use crate::json::JsValue;

use super::*;

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum SchemaNode {
    ValidNode(ValidNode),
    InvalidNode(InvalidNode),
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum ValidNode {
    #[serde(rename = "any")]
    AnyNode(AnyNode),

    #[serde(rename = "null")]
    NullNode(NullNode),

    #[serde(rename = "boolean")]
    BooleanNode(BooleanNode),

    #[serde(rename = "string")]
    StringNode(StringNode),

    #[serde(rename = "number")]
    NumberNode(NumberNode),

    #[serde(rename = "integer")]
    IntegerNode(IntegerNode),

    #[serde(rename = "array")]
    ArrayNode(ArrayNode),

    #[serde(rename = "object")]
    ObjectNode(ObjectNode),
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct InvalidNode {
    #[serde(flatten)]
    pub fields: HashMap<String, JsValue>,
}

impl_extra_props!(InvalidNode, fields);