1use std::collections::BTreeMap;
4
5use schemars::{JsonSchema, Schema, generate::SchemaSettings};
6
7use crate::{DocumentCatalog, QueryBundle, QueryExcerpt, QueryOutline, QueryRequest, QuerySearch};
8
9#[must_use]
11pub fn document_catalog_json_schema() -> Schema {
12 serialize_schema::<DocumentCatalog>()
13}
14
15#[must_use]
17pub fn query_request_json_schema() -> Schema {
18 deserialize_schema::<QueryRequest>()
19}
20
21#[must_use]
23pub fn query_bundle_json_schema() -> Schema {
24 serialize_schema::<QueryBundle>()
25}
26
27#[must_use]
29pub fn query_outline_json_schema() -> Schema {
30 serialize_schema::<QueryOutline>()
31}
32
33#[must_use]
35pub fn query_excerpt_json_schema() -> Schema {
36 serialize_schema::<QueryExcerpt>()
37}
38
39#[must_use]
41pub fn query_search_json_schema() -> Schema {
42 serialize_schema::<QuerySearch>()
43}
44
45#[must_use]
47pub fn query_json_schema_catalog() -> BTreeMap<&'static str, Schema> {
48 BTreeMap::from([
49 ("catalog", document_catalog_json_schema()),
50 ("excerpt", query_excerpt_json_schema()),
51 ("outline", query_outline_json_schema()),
52 ("query", query_bundle_json_schema()),
53 ("request", query_request_json_schema()),
54 ("search", query_search_json_schema()),
55 ])
56}
57
58fn deserialize_schema<T: JsonSchema>() -> Schema {
59 SchemaSettings::draft2020_12()
60 .for_deserialize()
61 .into_generator()
62 .into_root_schema_for::<T>()
63}
64
65fn serialize_schema<T: JsonSchema>() -> Schema {
66 SchemaSettings::draft2020_12()
67 .for_serialize()
68 .into_generator()
69 .into_root_schema_for::<T>()
70}