json_schema/
lib.rs

1extern crate serde;
2extern crate serde_json;
3extern crate derive_builder;
4
5use serde::{Serialize, Deserialize};
6use std::collections::HashMap;
7use derive_builder::Builder;
8pub type Id = String;
9pub type Schema = String;
10pub type Ref = String;
11pub type Comment = String;
12pub type Title = String;
13pub type Description = String;
14type AlwaysTrue = serde_json::Value;
15pub type ReadOnly = bool;
16pub type Examples = Vec<AlwaysTrue>;
17pub type MultipleOf = f64;
18pub type Maximum = f64;
19pub type ExclusiveMaximum = f64;
20pub type Minimum = f64;
21pub type ExclusiveMinimum = f64;
22pub type NonNegativeInteger = i64;
23pub type NonNegativeIntegerDefaultZero = i64;
24pub type Pattern = String;
25pub type SchemaArray = Vec<JSONSchema>;
26#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
27#[serde(untagged)]
28pub enum Items {
29    JSONSchema(Box<JSONSchema>),
30    SchemaArray(SchemaArray),
31}
32pub type UniqueItems = bool;
33pub type StringDoaGddGA = String;
34/// StringArray
35///
36/// # Default
37///
38/// []
39///
40pub type StringArray = Vec<StringDoaGddGA>;
41/// Definitions
42///
43/// # Default
44///
45/// {}
46///
47pub type Definitions = HashMap<String, JSONSchema>;
48/// Properties
49///
50/// # Default
51///
52/// {}
53///
54pub type Properties = HashMap<String, JSONSchema>;
55/// PatternProperties
56///
57/// # Default
58///
59/// {}
60///
61pub type PatternProperties = HashMap<String, JSONSchema>;
62#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
63#[serde(untagged)]
64pub enum DependenciesSet {
65    JSONSchema(Box<JSONSchema>),
66    StringArray(StringArray),
67}
68pub type Dependencies = HashMap<String, DependenciesSet>;
69pub type Enum = Vec<AlwaysTrue>;
70#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq)]
71pub enum SimpleTypes {
72    #[serde(rename = "array")]
73    Array,
74    #[serde(rename = "boolean")]
75    Boolean,
76    #[serde(rename = "integer")]
77    Integer,
78    #[serde(rename = "null")]
79    Null,
80    #[serde(rename = "number")]
81    Number,
82    #[serde(rename = "object")]
83    Object,
84    #[serde(rename = "string")]
85    String,
86}
87pub type ArrayOfSimpleTypes = Vec<SimpleTypes>;
88#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
89#[serde(untagged)]
90pub enum Type {
91    SimpleTypes(SimpleTypes),
92    ArrayOfSimpleTypes(ArrayOfSimpleTypes),
93}
94pub type Format = String;
95pub type ContentMediaType = String;
96pub type ContentEncoding = String;
97#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Builder, Default)]
98#[builder(setter(strip_option), default)]
99#[serde(default)]
100pub struct JSONSchemaObject {
101    #[serde(rename = "$id", skip_serializing_if = "Option::is_none")]
102    pub id: Option<Id>,
103    #[serde(rename = "$schema", skip_serializing_if = "Option::is_none")]
104    pub schema: Option<Schema>,
105    #[serde(rename = "$ref", skip_serializing_if = "Option::is_none")]
106    pub _ref: Option<Ref>,
107    #[serde(rename = "$comment", skip_serializing_if = "Option::is_none")]
108    pub comment: Option<Comment>,
109    #[serde(skip_serializing_if = "Option::is_none")]
110    pub title: Option<Title>,
111    #[serde(skip_serializing_if = "Option::is_none")]
112    pub description: Option<Description>,
113    #[serde(rename = "default", skip_serializing_if = "Option::is_none")]
114    pub _default: Option<AlwaysTrue>,
115    #[serde(rename = "readOnly", skip_serializing_if = "Option::is_none")]
116    pub read_only: Option<ReadOnly>,
117    #[serde(skip_serializing_if = "Option::is_none")]
118    pub examples: Option<Examples>,
119    #[serde(rename = "multipleOf", skip_serializing_if = "Option::is_none")]
120    pub multiple_of: Option<MultipleOf>,
121    #[serde(skip_serializing_if = "Option::is_none")]
122    pub maximum: Option<Maximum>,
123    #[serde(rename = "exclusiveMaximum", skip_serializing_if = "Option::is_none")]
124    pub exclusive_maximum: Option<ExclusiveMaximum>,
125    #[serde(skip_serializing_if = "Option::is_none")]
126    pub minimum: Option<Minimum>,
127    #[serde(rename = "exclusiveMinimum", skip_serializing_if = "Option::is_none")]
128    pub exclusive_minimum: Option<ExclusiveMinimum>,
129    #[serde(rename = "maxLength", skip_serializing_if = "Option::is_none")]
130    pub max_length: Option<NonNegativeInteger>,
131    #[serde(rename = "minLength", skip_serializing_if = "Option::is_none")]
132    pub min_length: Option<NonNegativeIntegerDefaultZero>,
133    #[serde(skip_serializing_if = "Option::is_none")]
134    pub pattern: Option<Pattern>,
135    #[serde(rename = "additionalItems", skip_serializing_if = "Option::is_none")]
136    pub additional_items: Option<Box<JSONSchema>>,
137    #[serde(skip_serializing_if = "Option::is_none")]
138    pub items: Option<Items>,
139    #[serde(rename = "maxItems", skip_serializing_if = "Option::is_none")]
140    pub max_items: Option<NonNegativeInteger>,
141    #[serde(rename = "minItems", skip_serializing_if = "Option::is_none")]
142    pub min_items: Option<NonNegativeIntegerDefaultZero>,
143    #[serde(rename = "uniqueItems", skip_serializing_if = "Option::is_none")]
144    pub unique_items: Option<UniqueItems>,
145    #[serde(skip_serializing_if = "Option::is_none")]
146    pub contains: Option<Box<JSONSchema>>,
147    #[serde(rename = "maxProperties", skip_serializing_if = "Option::is_none")]
148    pub max_properties: Option<NonNegativeInteger>,
149    #[serde(rename = "minProperties", skip_serializing_if = "Option::is_none")]
150    pub min_properties: Option<NonNegativeIntegerDefaultZero>,
151    #[serde(skip_serializing_if = "Option::is_none")]
152    pub required: Option<StringArray>,
153    #[serde(rename = "additionalProperties", skip_serializing_if = "Option::is_none")]
154    pub additional_properties: Option<Box<JSONSchema>>,
155    #[serde(skip_serializing_if = "Option::is_none")]
156    pub definitions: Option<Definitions>,
157    #[serde(skip_serializing_if = "Option::is_none")]
158    pub properties: Option<Properties>,
159    #[serde(rename = "patternProperties", skip_serializing_if = "Option::is_none")]
160    pub pattern_properties: Option<PatternProperties>,
161    #[serde(skip_serializing_if = "Option::is_none")]
162    pub dependencies: Option<Dependencies>,
163    #[serde(rename = "propertyNames", skip_serializing_if = "Option::is_none")]
164    pub property_names: Option<Box<JSONSchema>>,
165    #[serde(rename = "const", skip_serializing_if = "Option::is_none")]
166    pub _const: Option<AlwaysTrue>,
167    #[serde(rename = "enum", skip_serializing_if = "Option::is_none")]
168    pub _enum: Option<Enum>,
169    #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
170    pub _type: Option<Type>,
171    #[serde(skip_serializing_if = "Option::is_none")]
172    pub format: Option<Format>,
173    #[serde(rename = "contentMediaType", skip_serializing_if = "Option::is_none")]
174    pub content_media_type: Option<ContentMediaType>,
175    #[serde(rename = "contentEncoding", skip_serializing_if = "Option::is_none")]
176    pub content_encoding: Option<ContentEncoding>,
177    #[serde(rename = "if", skip_serializing_if = "Option::is_none")]
178    pub _if: Option<Box<JSONSchema>>,
179    #[serde(skip_serializing_if = "Option::is_none")]
180    pub then: Option<Box<JSONSchema>>,
181    #[serde(rename = "else", skip_serializing_if = "Option::is_none")]
182    pub _else: Option<Box<JSONSchema>>,
183    #[serde(rename = "allOf", skip_serializing_if = "Option::is_none")]
184    pub all_of: Option<SchemaArray>,
185    #[serde(rename = "anyOf", skip_serializing_if = "Option::is_none")]
186    pub any_of: Option<SchemaArray>,
187    #[serde(rename = "oneOf", skip_serializing_if = "Option::is_none")]
188    pub one_of: Option<SchemaArray>,
189    #[serde(skip_serializing_if = "Option::is_none")]
190    pub not: Option<Box<JSONSchema>>,
191}
192/// JSONSchemaBoolean
193///
194/// Always valid if true. Never valid if false. Is constant.
195///
196pub type JSONSchemaBoolean = bool;
197#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
198#[serde(untagged)]
199pub enum JSONSchema {
200    JSONSchemaObject(JSONSchemaObject),
201    JSONSchemaBoolean(JSONSchemaBoolean),
202}