use serde::Deserialize;
use std::collections::BTreeMap;
#[derive(Debug, Default)]
pub enum DefaultKeyword {
#[default]
Absent,
Present(serde_json::Value),
}
impl<'de> Deserialize<'de> for DefaultKeyword {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let v: serde_json::Value = Deserialize::deserialize(deserializer)?;
Ok(DefaultKeyword::Present(v))
}
}
#[derive(Debug, Deserialize)]
pub struct JsonSchema {
#[serde(default)]
pub title: Option<String>,
#[serde(default)]
pub description: Option<String>,
#[serde(default)]
pub r#type: Option<String>,
#[serde(default)]
pub properties: Option<BTreeMap<String, Box<JsonSchema>>>,
#[serde(default)]
pub required: Option<Vec<String>>,
#[serde(default)]
pub optional: Option<bool>,
#[serde(default)]
pub r#enum: Option<Vec<serde_json::Value>>,
#[serde(default)]
pub items: Option<Box<JsonSchema>>,
#[serde(default, rename = "additionalProperties")]
pub additional_properties: Option<serde_json::Value>,
#[serde(default)]
pub default: DefaultKeyword,
#[serde(default)]
pub minimum: Option<serde_json::Value>,
#[serde(default)]
pub maximum: Option<serde_json::Value>,
}