walrus_core/protocol/message/
client.rs1use compact_str::CompactString;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8#[serde(rename_all = "snake_case")]
9pub enum HubAction {
10 Install,
12 Uninstall,
14}
15
16#[derive(Debug, Clone, Serialize, Deserialize)]
18pub struct SendRequest {
19 pub agent: CompactString,
21 pub content: String,
23 #[serde(default, skip_serializing_if = "Option::is_none")]
25 pub session: Option<u64>,
26 #[serde(default, skip_serializing_if = "Option::is_none")]
28 pub sender: Option<CompactString>,
29}
30
31#[derive(Debug, Clone, Serialize, Deserialize)]
33pub struct StreamRequest {
34 pub agent: CompactString,
36 pub content: String,
38 #[serde(default, skip_serializing_if = "Option::is_none")]
40 pub session: Option<u64>,
41 #[serde(default, skip_serializing_if = "Option::is_none")]
43 pub sender: Option<CompactString>,
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize)]
48pub struct DownloadRequest {
49 pub model: CompactString,
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize)]
55pub struct HubRequest {
56 pub package: CompactString,
58 pub action: HubAction,
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize)]
64#[serde(tag = "type", rename_all = "snake_case")]
65pub enum ClientMessage {
66 Send {
68 agent: CompactString,
70 content: String,
72 #[serde(default, skip_serializing_if = "Option::is_none")]
74 session: Option<u64>,
75 #[serde(default, skip_serializing_if = "Option::is_none")]
77 sender: Option<CompactString>,
78 },
79 Stream {
81 agent: CompactString,
83 content: String,
85 #[serde(default, skip_serializing_if = "Option::is_none")]
87 session: Option<u64>,
88 #[serde(default, skip_serializing_if = "Option::is_none")]
90 sender: Option<CompactString>,
91 },
92 Download {
94 model: CompactString,
96 },
97 Ping,
99 Hub {
101 package: CompactString,
103 action: HubAction,
105 },
106 Sessions,
108 Kill {
110 session: u64,
112 },
113 Tasks,
115 KillTask {
117 task_id: u64,
119 },
120 Approve {
122 task_id: u64,
124 response: String,
126 },
127}
128
129impl From<SendRequest> for ClientMessage {
130 fn from(r: SendRequest) -> Self {
131 Self::Send {
132 agent: r.agent,
133 content: r.content,
134 session: r.session,
135 sender: r.sender,
136 }
137 }
138}
139
140impl From<StreamRequest> for ClientMessage {
141 fn from(r: StreamRequest) -> Self {
142 Self::Stream {
143 agent: r.agent,
144 content: r.content,
145 session: r.session,
146 sender: r.sender,
147 }
148 }
149}
150
151impl From<DownloadRequest> for ClientMessage {
152 fn from(r: DownloadRequest) -> Self {
153 Self::Download { model: r.model }
154 }
155}
156
157impl From<HubRequest> for ClientMessage {
158 fn from(r: HubRequest) -> Self {
159 Self::Hub {
160 package: r.package,
161 action: r.action,
162 }
163 }
164}