use std::collections::BTreeMap;
use schemars::{JsonSchema, Schema, generate::SchemaSettings};
use crate::{
DoctorReport, DocumentCatalog, QueryBundle, QueryExcerpt, QueryOutline, QueryRequest,
QuerySearch, ScopeQueryRequest, ScopeQueryResponse, TldrCacheUpdate,
};
#[must_use]
pub fn doctor_report_json_schema() -> Schema {
serialize_schema::<DoctorReport>()
}
#[must_use]
pub fn tldr_cache_update_json_schema() -> Schema {
serialize_schema::<TldrCacheUpdate>()
}
#[must_use]
pub fn document_catalog_json_schema() -> Schema {
serialize_schema::<DocumentCatalog>()
}
#[must_use]
pub fn query_request_json_schema() -> Schema {
deserialize_schema::<QueryRequest>()
}
#[must_use]
pub fn query_bundle_json_schema() -> Schema {
serialize_schema::<QueryBundle>()
}
#[must_use]
pub fn query_outline_json_schema() -> Schema {
serialize_schema::<QueryOutline>()
}
#[must_use]
pub fn query_excerpt_json_schema() -> Schema {
serialize_schema::<QueryExcerpt>()
}
#[must_use]
pub fn query_explanation_json_schema() -> Schema {
serialize_schema::<crate::QueryExplanation>()
}
#[must_use]
pub fn query_search_json_schema() -> Schema {
serialize_schema::<QuerySearch>()
}
#[must_use]
pub fn scope_query_request_json_schema() -> Schema {
deserialize_schema::<ScopeQueryRequest>()
}
#[must_use]
pub fn scope_query_response_json_schema() -> Schema {
serialize_schema::<ScopeQueryResponse>()
}
#[must_use]
pub fn query_json_schema_catalog() -> BTreeMap<&'static str, Schema> {
BTreeMap::from([
("catalog", document_catalog_json_schema()),
("doctor", doctor_report_json_schema()),
("excerpt", query_excerpt_json_schema()),
("explanation", query_explanation_json_schema()),
("outline", query_outline_json_schema()),
("query", query_bundle_json_schema()),
("request", query_request_json_schema()),
("search", query_search_json_schema()),
("scope-query", scope_query_response_json_schema()),
("scope-request", scope_query_request_json_schema()),
("tldr-update", tldr_cache_update_json_schema()),
])
}
fn deserialize_schema<T: JsonSchema>() -> Schema {
SchemaSettings::draft2020_12()
.for_deserialize()
.into_generator()
.into_root_schema_for::<T>()
}
fn serialize_schema<T: JsonSchema>() -> Schema {
SchemaSettings::draft2020_12()
.for_serialize()
.into_generator()
.into_root_schema_for::<T>()
}