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_explanation_json_schema() -> Schema {
57 serialize_schema::<crate::QueryExplanation>()
58}
59
60#[must_use]
62pub fn query_search_json_schema() -> Schema {
63 serialize_schema::<QuerySearch>()
64}
65
66#[must_use]
68pub fn scope_query_request_json_schema() -> Schema {
69 deserialize_schema::<ScopeQueryRequest>()
70}
71
72#[must_use]
74pub fn scope_query_response_json_schema() -> Schema {
75 serialize_schema::<ScopeQueryResponse>()
76}
77
78#[must_use]
80pub fn query_json_schema_catalog() -> BTreeMap<&'static str, Schema> {
81 BTreeMap::from([
82 ("catalog", document_catalog_json_schema()),
83 ("doctor", doctor_report_json_schema()),
84 ("excerpt", query_excerpt_json_schema()),
85 ("explanation", query_explanation_json_schema()),
86 ("outline", query_outline_json_schema()),
87 ("query", query_bundle_json_schema()),
88 ("request", query_request_json_schema()),
89 ("search", query_search_json_schema()),
90 ("scope-query", scope_query_response_json_schema()),
91 ("scope-request", scope_query_request_json_schema()),
92 ("tldr-update", tldr_cache_update_json_schema()),
93 ])
94}
95
96fn deserialize_schema<T: JsonSchema>() -> Schema {
97 SchemaSettings::draft2020_12()
98 .for_deserialize()
99 .into_generator()
100 .into_root_schema_for::<T>()
101}
102
103fn serialize_schema<T: JsonSchema>() -> Schema {
104 SchemaSettings::draft2020_12()
105 .for_serialize()
106 .into_generator()
107 .into_root_schema_for::<T>()
108}