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;
34pub type StringArray = Vec<StringDoaGddGA>;
41pub type Definitions = HashMap<String, JSONSchema>;
48pub type Properties = HashMap<String, JSONSchema>;
55pub 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}
192pub type JSONSchemaBoolean = bool;
197#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
198#[serde(untagged)]
199pub enum JSONSchema {
200 JSONSchemaObject(JSONSchemaObject),
201 JSONSchemaBoolean(JSONSchemaBoolean),
202}