1use serde::Deserialize;
2use std::collections::BTreeMap;
3
4#[derive(Debug, Default)]
8pub enum DefaultKeyword {
9 #[default]
11 Absent,
12 Present(serde_json::Value),
14}
15
16impl<'de> Deserialize<'de> for DefaultKeyword {
17 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
18 where
19 D: serde::Deserializer<'de>,
20 {
21 let v: serde_json::Value = Deserialize::deserialize(deserializer)?;
22 Ok(DefaultKeyword::Present(v))
23 }
24}
25
26#[derive(Debug, Deserialize)]
32pub struct JsonSchema {
33 #[serde(default)]
34 pub title: Option<String>,
35
36 #[serde(default)]
37 pub description: Option<String>,
38
39 #[serde(default)]
40 pub r#type: Option<String>,
41
42 #[serde(default)]
43 pub properties: Option<BTreeMap<String, Box<JsonSchema>>>,
44
45 #[serde(default)]
46 pub required: Option<Vec<String>>,
47
48 #[serde(default)]
54 pub optional: Option<bool>,
55
56 #[serde(default)]
57 pub r#enum: Option<Vec<serde_json::Value>>,
58
59 #[serde(default)]
60 pub items: Option<Box<JsonSchema>>,
61
62 #[serde(default, rename = "additionalProperties")]
63 pub additional_properties: Option<serde_json::Value>,
64
65 #[serde(default)]
66 pub default: DefaultKeyword,
67
68 #[serde(default)]
69 pub minimum: Option<serde_json::Value>,
70
71 #[serde(default)]
72 pub maximum: Option<serde_json::Value>,
73}