codex_app_server_protocol/
jsonrpc_lite.rs1use schemars::JsonSchema;
5use serde::Deserialize;
6use serde::Serialize;
7use ts_rs::TS;
8
9pub const JSONRPC_VERSION: &str = "2.0";
10
11#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, Hash, Eq, JsonSchema, TS)]
12#[serde(untagged)]
13pub enum RequestId {
14 String(String),
15 #[ts(type = "number")]
16 Integer(i64),
17}
18
19pub type Result = serde_json::Value;
20
21#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema, TS)]
23#[serde(untagged)]
24pub enum JSONRPCMessage {
25 Request(JSONRPCRequest),
26 Notification(JSONRPCNotification),
27 Response(JSONRPCResponse),
28 Error(JSONRPCError),
29}
30
31#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema, TS)]
33pub struct JSONRPCRequest {
34 pub id: RequestId,
35 pub method: String,
36 #[serde(default, skip_serializing_if = "Option::is_none")]
37 #[ts(optional)]
38 pub params: Option<serde_json::Value>,
39}
40
41#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema, TS)]
43pub struct JSONRPCNotification {
44 pub method: String,
45 #[serde(default, skip_serializing_if = "Option::is_none")]
46 #[ts(optional)]
47 pub params: Option<serde_json::Value>,
48}
49
50#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema, TS)]
52pub struct JSONRPCResponse {
53 pub id: RequestId,
54 pub result: Result,
55}
56
57#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema, TS)]
59pub struct JSONRPCError {
60 pub error: JSONRPCErrorError,
61 pub id: RequestId,
62}
63
64#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema, TS)]
65pub struct JSONRPCErrorError {
66 pub code: i64,
67 #[serde(default, skip_serializing_if = "Option::is_none")]
68 #[ts(optional)]
69 pub data: Option<serde_json::Value>,
70 pub message: String,
71}