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}
24
25#[derive(Debug, Clone, Serialize, Deserialize)]
27pub struct StreamRequest {
28 pub agent: CompactString,
30 pub content: String,
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize)]
36pub struct DownloadRequest {
37 pub model: CompactString,
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize)]
43pub struct HubRequest {
44 pub package: CompactString,
46 pub action: HubAction,
48}
49
50#[derive(Debug, Clone, Serialize, Deserialize)]
52#[serde(tag = "type", rename_all = "snake_case")]
53pub enum ClientMessage {
54 Send {
56 agent: CompactString,
58 content: String,
60 },
61 Stream {
63 agent: CompactString,
65 content: String,
67 },
68 Download {
70 model: CompactString,
72 },
73 Ping,
75 Hub {
77 package: CompactString,
79 action: HubAction,
81 },
82}
83
84impl From<SendRequest> for ClientMessage {
85 fn from(r: SendRequest) -> Self {
86 Self::Send {
87 agent: r.agent,
88 content: r.content,
89 }
90 }
91}
92
93impl From<StreamRequest> for ClientMessage {
94 fn from(r: StreamRequest) -> Self {
95 Self::Stream {
96 agent: r.agent,
97 content: r.content,
98 }
99 }
100}
101
102impl From<DownloadRequest> for ClientMessage {
103 fn from(r: DownloadRequest) -> Self {
104 Self::Download { model: r.model }
105 }
106}
107
108impl From<HubRequest> for ClientMessage {
109 fn from(r: HubRequest) -> Self {
110 Self::Hub {
111 package: r.package,
112 action: r.action,
113 }
114 }
115}