vv_agent/app_server/protocol/
schema.rs1use 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];