1#![allow(missing_docs)]
6
7#[allow(unused_imports)]
8use crate::common::{AnyValue, JsonObject, StringOrMarkdown, Uri};
9#[allow(unused_imports)]
10use serde::{Deserialize, Serialize};
11#[allow(unused_imports)]
12use serde_repr::{Deserialize_repr, Serialize_repr};
13
14use crate::actions::ActionEnvelope;
15
16#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
20pub struct JsonRpcRequest {
21 pub jsonrpc: JsonRpcVersion,
22 pub id: u64,
23 pub method: String,
24 #[serde(default, skip_serializing_if = "Option::is_none")]
25 pub params: Option<AnyValue>,
26}
27
28#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
30pub struct JsonRpcSuccessResponse {
31 pub jsonrpc: JsonRpcVersion,
32 pub id: u64,
33 pub result: AnyValue,
34}
35
36#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
38pub struct JsonRpcErrorResponse {
39 pub jsonrpc: JsonRpcVersion,
40 pub id: u64,
41 pub error: JsonRpcError,
42}
43
44#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
46pub struct JsonRpcError {
47 pub code: i32,
48 pub message: String,
49 #[serde(default, skip_serializing_if = "Option::is_none")]
50 pub data: Option<AnyValue>,
51}
52
53#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
55pub struct JsonRpcNotification {
56 pub jsonrpc: JsonRpcVersion,
57 pub method: String,
58 #[serde(default, skip_serializing_if = "Option::is_none")]
59 pub params: Option<AnyValue>,
60}
61
62#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
64pub enum JsonRpcVersion {
65 #[default]
66 #[serde(rename = "2.0")]
67 V2,
68}
69
70#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
76#[serde(untagged)]
77pub enum JsonRpcMessage {
78 Request(JsonRpcRequest),
79 SuccessResponse(JsonRpcSuccessResponse),
80 ErrorResponse(JsonRpcErrorResponse),
81 Notification(JsonRpcNotification),
82}
83
84pub type ActionNotificationParams = ActionEnvelope;