Skip to main content

kimi_wire/protocol/
jsonrpc.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4/// JSON-RPC version string (always `"2.0"`).
5/// JSON-RPC version string (always `"2.0"`).
6#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
7pub struct JsonRpcVersion(pub String);
8
9impl Default for JsonRpcVersion {
10    fn default() -> Self {
11        Self("2.0".to_string())
12    }
13}
14
15/// A JSON-RPC 2.0 request.
16#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
17pub struct JsonRpcRequest<Params> {
18    /// JSON-RPC version.
19    pub jsonrpc: JsonRpcVersion,
20    /// Method name.
21    pub method: String,
22    /// Request id.
23    pub id: String,
24    /// Method parameters.
25    pub params: Params,
26}
27
28/// A JSON-RPC 2.0 notification (no id).
29#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
30pub struct JsonRpcNotification<Params> {
31    /// JSON-RPC version.
32    pub jsonrpc: JsonRpcVersion,
33    /// Method name.
34    pub method: String,
35    /// Method parameters.
36    pub params: Params,
37}
38
39/// A successful JSON-RPC 2.0 response.
40#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
41pub struct JsonRpcSuccessResponse<Result> {
42    /// JSON-RPC version.
43    pub jsonrpc: JsonRpcVersion,
44    /// Request id matching the request.
45    pub id: String,
46    /// Result value.
47    pub result: Result,
48}
49
50/// An error JSON-RPC 2.0 response.
51#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
52pub struct JsonRpcErrorResponse {
53    /// JSON-RPC version.
54    pub jsonrpc: JsonRpcVersion,
55    /// Request id matching the request (or `null`).
56    pub id: String,
57    /// Error details.
58    pub error: JsonRpcError,
59}
60
61/// JSON-RPC error object.
62#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
63pub struct JsonRpcError {
64    /// Error code.
65    pub code: i32,
66    /// Error message.
67    pub message: String,
68    /// Additional error data.
69    #[serde(skip_serializing_if = "Option::is_none")]
70    pub data: Option<Value>,
71}
72
73/// JSON-RPC error code for "Method not found".
74pub const METHOD_NOT_FOUND: i32 = -32601;
75
76/// A raw, untyped wire message for low-level parsing.
77///
78/// All fields are optional so that any valid JSON-RPC line can be parsed
79/// without knowing the concrete schema upfront.
80#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
81pub struct RawWireMessage {
82    /// JSON-RPC version.
83    pub jsonrpc: JsonRpcVersion,
84    /// Request/response id, if present.
85    pub id: Option<String>,
86    /// Method name for requests/notifications.
87    pub method: Option<String>,
88    /// Parameters for requests/notifications.
89    pub params: Option<Value>,
90    /// Result for success responses.
91    pub result: Option<Value>,
92    /// Error for error responses.
93    pub error: Option<JsonRpcError>,
94}