use schemars::JsonSchema;
use schemars::generate::SchemaSettings;
use serde_json::Value;
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum SchemaDialect {
#[default]
Draft07,
Draft2020_12,
}
impl SchemaDialect {
#[must_use]
pub fn settings(self) -> SchemaSettings {
match self {
Self::Draft07 => SchemaSettings::draft07(),
Self::Draft2020_12 => SchemaSettings::draft2020_12(),
}
}
#[must_use]
pub fn generate<T: JsonSchema>(self) -> Value {
self.settings()
.into_generator()
.into_root_schema_for::<T>()
.to_value()
}
#[must_use]
pub fn meta_schema(self) -> &'static str {
match self {
Self::Draft07 => "http://json-schema.org/draft-07/schema#",
Self::Draft2020_12 => "https://json-schema.org/draft/2020-12/schema",
}
}
}