walrus_core/protocol/message/
convert.rs1use crate::protocol::proto::{
4 ClientMessage, DownloadEvent, SendMsg, SendResponse, ServerMessage, ServiceQueryResultMsg,
5 StreamEvent, StreamMsg, TaskEvent, client_message, download_event, server_message,
6 stream_event, task_event,
7};
8
9impl From<SendMsg> for ClientMessage {
12 fn from(msg: SendMsg) -> Self {
13 Self {
14 msg: Some(client_message::Msg::Send(msg)),
15 }
16 }
17}
18
19impl From<StreamMsg> for ClientMessage {
20 fn from(msg: StreamMsg) -> Self {
21 Self {
22 msg: Some(client_message::Msg::Stream(msg)),
23 }
24 }
25}
26
27impl From<SendResponse> for ServerMessage {
30 fn from(r: SendResponse) -> Self {
31 Self {
32 msg: Some(server_message::Msg::Response(r)),
33 }
34 }
35}
36
37impl From<StreamEvent> for ServerMessage {
38 fn from(e: StreamEvent) -> Self {
39 Self {
40 msg: Some(server_message::Msg::Stream(e)),
41 }
42 }
43}
44
45impl From<DownloadEvent> for ServerMessage {
46 fn from(e: DownloadEvent) -> Self {
47 Self {
48 msg: Some(server_message::Msg::Download(e)),
49 }
50 }
51}
52
53impl From<TaskEvent> for ServerMessage {
54 fn from(e: TaskEvent) -> Self {
55 Self {
56 msg: Some(server_message::Msg::Task(e)),
57 }
58 }
59}
60
61fn error_or_unexpected(msg: ServerMessage) -> anyhow::Error {
64 match msg.msg {
65 Some(server_message::Msg::Error(e)) => {
66 anyhow::anyhow!("server error ({}): {}", e.code, e.message)
67 }
68 other => anyhow::anyhow!("unexpected response: {other:?}"),
69 }
70}
71
72impl TryFrom<ServerMessage> for SendResponse {
73 type Error = anyhow::Error;
74 fn try_from(msg: ServerMessage) -> anyhow::Result<Self> {
75 match msg.msg {
76 Some(server_message::Msg::Response(r)) => Ok(r),
77 _ => Err(error_or_unexpected(msg)),
78 }
79 }
80}
81
82impl TryFrom<ServerMessage> for stream_event::Event {
83 type Error = anyhow::Error;
84 fn try_from(msg: ServerMessage) -> anyhow::Result<Self> {
85 match msg.msg {
86 Some(server_message::Msg::Stream(e)) => {
87 e.event.ok_or_else(|| anyhow::anyhow!("empty stream event"))
88 }
89 _ => Err(error_or_unexpected(msg)),
90 }
91 }
92}
93
94impl TryFrom<ServerMessage> for download_event::Event {
95 type Error = anyhow::Error;
96 fn try_from(msg: ServerMessage) -> anyhow::Result<Self> {
97 match msg.msg {
98 Some(server_message::Msg::Download(e)) => e
99 .event
100 .ok_or_else(|| anyhow::anyhow!("empty download event")),
101 _ => Err(error_or_unexpected(msg)),
102 }
103 }
104}
105
106impl TryFrom<ServerMessage> for task_event::Event {
107 type Error = anyhow::Error;
108 fn try_from(msg: ServerMessage) -> anyhow::Result<Self> {
109 match msg.msg {
110 Some(server_message::Msg::Task(e)) => {
111 e.event.ok_or_else(|| anyhow::anyhow!("empty task event"))
112 }
113 _ => Err(error_or_unexpected(msg)),
114 }
115 }
116}
117
118impl TryFrom<ServerMessage> for ServiceQueryResultMsg {
119 type Error = anyhow::Error;
120 fn try_from(msg: ServerMessage) -> anyhow::Result<Self> {
121 match msg.msg {
122 Some(server_message::Msg::ServiceQueryResult(r)) => Ok(r),
123 _ => Err(error_or_unexpected(msg)),
124 }
125 }
126}