Skip to main content

vv_agent/app_server/protocol/
schema.rs

1use std::collections::BTreeMap;
2use std::fmt;
3
4use schemars::JsonSchema;
5use serde::{Deserialize, Serialize};
6use ts_rs::TS;
7
8pub type SchemaBundle = BTreeMap<String, String>;
9
10#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema, TS)]
11#[serde(rename_all = "camelCase")]
12pub struct SchemaExportResponse {
13    pub json_schema: SchemaBundle,
14    pub typescript: SchemaBundle,
15}
16
17#[derive(Debug, Clone, PartialEq, Eq)]
18pub struct AppServerSchemaError {
19    message: String,
20}
21
22impl AppServerSchemaError {
23    fn committed_bundle(message: impl Into<String>) -> Self {
24        Self {
25            message: message.into(),
26        }
27    }
28}
29
30impl fmt::Display for AppServerSchemaError {
31    fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
32        formatter.write_str(&self.message)
33    }
34}
35
36impl std::error::Error for AppServerSchemaError {}
37
38pub fn generate_app_server_json_schema_bundle() -> Result<SchemaBundle, AppServerSchemaError> {
39    committed_bundle(JSON_SCHEMA_FILES)
40}
41
42pub fn generate_app_server_typescript_bundle() -> Result<SchemaBundle, AppServerSchemaError> {
43    committed_bundle(TYPESCRIPT_SCHEMA_FILES)
44}
45
46fn committed_bundle<const N: usize>(
47    files: [(&'static str, &'static str); N],
48) -> Result<SchemaBundle, AppServerSchemaError> {
49    let bundle = files
50        .into_iter()
51        .map(|(name, source)| (name.to_string(), source.to_string()))
52        .collect::<SchemaBundle>();
53    if bundle.len() != N {
54        return Err(AppServerSchemaError::committed_bundle(
55            "duplicate committed App Server schema name",
56        ));
57    }
58    Ok(bundle)
59}
60
61const JSON_SCHEMA_FILES: [(&str, &str); 19] = [
62    (
63        "AppItem",
64        include_str!("../../../schema/app-server/json/AppItem.json"),
65    ),
66    (
67        "AppThread",
68        include_str!("../../../schema/app-server/json/AppThread.json"),
69    ),
70    (
71        "AppTurn",
72        include_str!("../../../schema/app-server/json/AppTurn.json"),
73    ),
74    (
75        "ApprovalDecision",
76        include_str!("../../../schema/app-server/json/ApprovalDecision.json"),
77    ),
78    (
79        "ApprovalRequestParams",
80        include_str!("../../../schema/app-server/json/ApprovalRequestParams.json"),
81    ),
82    (
83        "ApprovalResolveParams",
84        include_str!("../../../schema/app-server/json/ApprovalResolveParams.json"),
85    ),
86    (
87        "ClientRequest",
88        include_str!("../../../schema/app-server/json/ClientRequest.json"),
89    ),
90    (
91        "InitializeParams",
92        include_str!("../../../schema/app-server/json/InitializeParams.json"),
93    ),
94    (
95        "InitializeResponse",
96        include_str!("../../../schema/app-server/json/InitializeResponse.json"),
97    ),
98    (
99        "JsonRpcMessage",
100        include_str!("../../../schema/app-server/json/JsonRpcMessage.json"),
101    ),
102    (
103        "SchemaExportResponse",
104        include_str!("../../../schema/app-server/json/SchemaExportResponse.json"),
105    ),
106    (
107        "ServerNotification",
108        include_str!("../../../schema/app-server/json/ServerNotification.json"),
109    ),
110    (
111        "ServerRequest",
112        include_str!("../../../schema/app-server/json/ServerRequest.json"),
113    ),
114    (
115        "ThreadReadResponse",
116        include_str!("../../../schema/app-server/json/ThreadReadResponse.json"),
117    ),
118    (
119        "ThreadResumeResponse",
120        include_str!("../../../schema/app-server/json/ThreadResumeResponse.json"),
121    ),
122    (
123        "ThreadStartResponse",
124        include_str!("../../../schema/app-server/json/ThreadStartResponse.json"),
125    ),
126    (
127        "TurnResumeParams",
128        include_str!("../../../schema/app-server/json/TurnResumeParams.json"),
129    ),
130    (
131        "TurnResumeResponse",
132        include_str!("../../../schema/app-server/json/TurnResumeResponse.json"),
133    ),
134    (
135        "TurnStartResponse",
136        include_str!("../../../schema/app-server/json/TurnStartResponse.json"),
137    ),
138];
139
140const TYPESCRIPT_SCHEMA_FILES: [(&str, &str); 18] = [
141    (
142        "AppItem.ts",
143        include_str!("../../../schema/app-server/typescript/AppItem.ts"),
144    ),
145    (
146        "AppThread.ts",
147        include_str!("../../../schema/app-server/typescript/AppThread.ts"),
148    ),
149    (
150        "AppTurn.ts",
151        include_str!("../../../schema/app-server/typescript/AppTurn.ts"),
152    ),
153    (
154        "ApprovalDecision.ts",
155        include_str!("../../../schema/app-server/typescript/ApprovalDecision.ts"),
156    ),
157    (
158        "ApprovalRequestParams.ts",
159        include_str!("../../../schema/app-server/typescript/ApprovalRequestParams.ts"),
160    ),
161    (
162        "ApprovalResolveParams.ts",
163        include_str!("../../../schema/app-server/typescript/ApprovalResolveParams.ts"),
164    ),
165    (
166        "ClientRequest.ts",
167        include_str!("../../../schema/app-server/typescript/ClientRequest.ts"),
168    ),
169    (
170        "InitializeParams.ts",
171        include_str!("../../../schema/app-server/typescript/InitializeParams.ts"),
172    ),
173    (
174        "InitializeResponse.ts",
175        include_str!("../../../schema/app-server/typescript/InitializeResponse.ts"),
176    ),
177    (
178        "SchemaExportResponse.ts",
179        include_str!("../../../schema/app-server/typescript/SchemaExportResponse.ts"),
180    ),
181    (
182        "ServerNotification.ts",
183        include_str!("../../../schema/app-server/typescript/ServerNotification.ts"),
184    ),
185    (
186        "ServerRequest.ts",
187        include_str!("../../../schema/app-server/typescript/ServerRequest.ts"),
188    ),
189    (
190        "ThreadReadResponse.ts",
191        include_str!("../../../schema/app-server/typescript/ThreadReadResponse.ts"),
192    ),
193    (
194        "ThreadResumeResponse.ts",
195        include_str!("../../../schema/app-server/typescript/ThreadResumeResponse.ts"),
196    ),
197    (
198        "ThreadStartResponse.ts",
199        include_str!("../../../schema/app-server/typescript/ThreadStartResponse.ts"),
200    ),
201    (
202        "TurnResumeParams.ts",
203        include_str!("../../../schema/app-server/typescript/TurnResumeParams.ts"),
204    ),
205    (
206        "TurnResumeResponse.ts",
207        include_str!("../../../schema/app-server/typescript/TurnResumeResponse.ts"),
208    ),
209    (
210        "TurnStartResponse.ts",
211        include_str!("../../../schema/app-server/typescript/TurnStartResponse.ts"),
212    ),
213];