actor_core_client/
protocol.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4// Client-bound messages (ToClient)
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct Init {
8    // Connection id
9    pub ci: String,
10    // Connection token
11    pub ct: String,
12}
13
14#[derive(Debug, Clone, Serialize, Deserialize)]
15pub struct RpcResponseOk {
16    // Request id
17    pub i: i64,
18    // Output value
19    pub o: Value,
20}
21
22#[derive(Debug, Clone, Serialize, Deserialize)]
23pub struct RpcResponseError {
24    // Request id
25    pub i: i64,
26    // Error code
27    pub c: String,
28    // Error message
29    pub m: String,
30    // Error metadata
31    pub md: Option<Value>,
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize)]
35pub struct ToClientEvent {
36    // Event name
37    pub n: String,
38    // Event arguments
39    pub a: Vec<Value>,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize)]
43pub struct ToClientError {
44    // Error code
45    pub c: String,
46    // Error message
47    pub m: String,
48    // Error metadata
49    pub md: Option<Value>,
50}
51
52#[derive(Debug, Clone, Serialize, Deserialize)]
53#[serde(untagged)]
54pub enum ToClientBody {
55    // Initialize connection
56    Init { i: Init },
57    // RPC response success
58    ResponseOk { ro: RpcResponseOk },
59    // RPC response error
60    ResponseError { re: RpcResponseError },
61    // Event message
62    EventMessage { ev: ToClientEvent },
63    // Error message
64    EventError { er: ToClientError },
65}
66
67#[derive(Debug, Clone, Serialize, Deserialize)]
68pub struct ToClient {
69    // Message body
70    pub b: ToClientBody,
71}
72
73// Server-bound messages (ToServer)
74
75#[derive(Debug, Clone, Serialize, Deserialize)]
76pub struct RpcRequest {
77    // Request id
78    pub i: i64,
79    // Method name
80    pub n: String,
81    // Method arguments
82    pub a: Vec<Value>,
83}
84
85#[derive(Debug, Clone, Serialize, Deserialize)]
86pub struct SubscriptionRequest {
87    // Event name
88    pub e: String,
89    // Subscribe (true) or unsubscribe (false)
90    pub s: bool,
91}
92
93#[derive(Debug, Clone, Serialize, Deserialize)]
94#[serde(untagged)]
95pub enum ToServerBody {
96    // RPC request
97    RpcRequest { rr: RpcRequest },
98    // Subscription request
99    SubscriptionRequest { sr: SubscriptionRequest },
100}
101
102#[derive(Debug, Clone, Serialize, Deserialize)]
103pub struct ToServer {
104    // Message body
105    pub b: ToServerBody,
106}