diff options
Diffstat (limited to 'jsonrpc/src')
-rw-r--r-- | jsonrpc/src/client/builder.rs | 3 | ||||
-rw-r--r-- | jsonrpc/src/client/mod.rs | 10 | ||||
-rw-r--r-- | jsonrpc/src/message.rs | 28 |
3 files changed, 31 insertions, 10 deletions
diff --git a/jsonrpc/src/client/builder.rs b/jsonrpc/src/client/builder.rs index 4bfb5c3..a287070 100644 --- a/jsonrpc/src/client/builder.rs +++ b/jsonrpc/src/client/builder.rs @@ -50,7 +50,8 @@ pub struct ClientBuilder { } impl ClientBuilder { - /// Set timeout for sending and receiving messages, in milliseconds. + /// Set timeout for receiving messages, in milliseconds. Requests will + /// fail if it takes longer. /// /// # Examples /// diff --git a/jsonrpc/src/client/mod.rs b/jsonrpc/src/client/mod.rs index 05479f9..326252a 100644 --- a/jsonrpc/src/client/mod.rs +++ b/jsonrpc/src/client/mod.rs @@ -98,15 +98,7 @@ impl Client { let req_json = serde_json::to_value(&request)?; - match self.timeout { - Some(ms) => { - let t = Duration::from_millis(ms); - timeout(t, self.conn.send(req_json)).await??; - } - None => { - self.conn.send(req_json).await?; - } - } + self.conn.send(req_json).await?; let (tx, rx) = async_channel::bounded(CHANNEL_CAP); self.chans.lock().await.insert(id, tx); diff --git a/jsonrpc/src/message.rs b/jsonrpc/src/message.rs index 1f296cd..36ece38 100644 --- a/jsonrpc/src/message.rs +++ b/jsonrpc/src/message.rs @@ -19,47 +19,75 @@ pub const INVALID_PARAMS_ERROR_CODE: i32 = -32602; /// Internal error: Internal JSON-RPC error. pub const INTERNAL_ERROR_CODE: i32 = -32603; +/// SubscriptionID is used to identify a subscription. pub type SubscriptionID = u32; +/// Request represents a JSON-RPC request message. +/// It includes the JSON-RPC version, an identifier for the request, the method +/// to be invoked, and optional parameters. #[derive(Debug, Serialize, Deserialize)] pub struct Request { + /// JSON-RPC version, typically "2.0". pub jsonrpc: String, + /// Unique identifier for the request, can be a number or a string. pub id: serde_json::Value, + /// The name of the method to be invoked. pub method: String, + /// Optional parameters for the method. #[serde(skip_serializing_if = "Option::is_none")] pub params: Option<serde_json::Value>, } +/// Response represents a JSON-RPC response message. +/// It includes the JSON-RPC version, an identifier matching the request, the result of the request, +/// and an optional error. #[derive(Debug, Serialize, Deserialize)] #[serde(deny_unknown_fields)] pub struct Response { + /// JSON-RPC version, typically "2.0". pub jsonrpc: String, + /// Unique identifier for the request, can be a number or a string. #[serde(skip_serializing_if = "Option::is_none")] pub id: Option<serde_json::Value>, + /// Result of the request if it was successful. #[serde(skip_serializing_if = "Option::is_none")] pub result: Option<serde_json::Value>, + /// Error object if the request failed. #[serde(skip_serializing_if = "Option::is_none")] pub error: Option<Error>, } +/// Notification represents a JSON-RPC notification message. #[derive(Debug, Serialize, Deserialize)] pub struct Notification { + /// JSON-RPC version, typically "2.0". pub jsonrpc: String, + /// The name of the method to be invoked. pub method: String, + /// Optional parameters for the method. #[serde(skip_serializing_if = "Option::is_none")] pub params: Option<serde_json::Value>, } +/// NotificationResult represents the result of a subscription notification. +/// It includes the result and the subscription ID that triggered the notification. #[derive(Debug, Serialize, Deserialize)] pub struct NotificationResult { + /// Optional data about the notification. pub result: Option<serde_json::Value>, + /// ID of the subscription that triggered the notification. pub subscription: SubscriptionID, } +// Error represents an error in a JSON-RPC response. +// It includes an error code, a message, and optional additional data. #[derive(Debug, Serialize, Deserialize)] pub struct Error { + /// Error code indicating the type of error. pub code: i32, + /// Human-readable error message. pub message: String, + /// Optional additional data about the error. #[serde(skip_serializing_if = "Option::is_none")] pub data: Option<serde_json::Value>, } |