1use std::collections::BTreeMap;
4
5use schemars::{JsonSchema, Schema, generate::SchemaSettings};
6
7use crate::{
8 DoctorReport, DocumentCatalog, QueryBundle, QueryExcerpt, QueryOutline, QueryRequest,
9 QuerySearch, ScopeQueryRequest, ScopeQueryResponse, TldrCacheUpdate,
10};
11
12#[must_use]
14pub fn doctor_report_json_schema() -> Schema {
15 serialize_schema::<DoctorReport>()
16}
17
18#[must_use]
20pub fn tldr_cache_update_json_schema() -> Schema {
21 serialize_schema::<TldrCacheUpdate>()
22}
23
24#[must_use]
26pub fn document_catalog_json_schema() -> Schema {
27 serialize_schema::<DocumentCatalog>()
28}
29
30#[must_use]
32pub fn query_request_json_schema() -> Schema {
33 deserialize_schema::<QueryRequest>()
34}
35
36#[must_use]
38pub fn query_bundle_json_schema() -> Schema {
39 serialize_schema::<QueryBundle>()
40}
41
42#[must_use]
44pub fn query_outline_json_schema() -> Schema {
45 serialize_schema::<QueryOutline>()
46}
47
48#[must_use]
50pub fn query_excerpt_json_schema() -> Schema {
51 serialize_schema::<QueryExcerpt>()
52}
53
54#[must_use]
56pub fn query_search_json_schema() -> Schema {
57 serialize_schema::<QuerySearch>()
58}
59
60#[must_use]
62pub fn scope_query_request_json_schema() -> Schema {
63 deserialize_schema::<ScopeQueryRequest>()
64}
65
66#[must_use]
68pub fn scope_query_response_json_schema() -> Schema {
69 serialize_schema::<ScopeQueryResponse>()
70}
71
72#[must_use]
74pub fn query_json_schema_catalog() -> BTreeMap<&'static str, Schema> {
75 BTreeMap::from([
76 ("catalog", document_catalog_json_schema()),
77 ("doctor", doctor_report_json_schema()),
78 ("excerpt", query_excerpt_json_schema()),
79 ("outline", query_outline_json_schema()),
80 ("query", query_bundle_json_schema()),
81 ("request", query_request_json_schema()),
82 ("search", query_search_json_schema()),
83 ("scope-query", scope_query_response_json_schema()),
84 ("scope-request", scope_query_request_json_schema()),
85 ("tldr-update", tldr_cache_update_json_schema()),
86 ])
87}
88
89fn deserialize_schema<T: JsonSchema>() -> Schema {
90 SchemaSettings::draft2020_12()
91 .for_deserialize()
92 .into_generator()
93 .into_root_schema_for::<T>()
94}
95
96fn serialize_schema<T: JsonSchema>() -> Schema {
97 SchemaSettings::draft2020_12()
98 .for_serialize()
99 .into_generator()
100 .into_root_schema_for::<T>()
101}