-
Notifications
You must be signed in to change notification settings - Fork 0
/
websocket_message_conversion.rs
45 lines (38 loc) · 1.44 KB
/
websocket_message_conversion.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
use tokio_tungstenite::tungstenite;
use tokio_tungstenite::tungstenite::protocol::CloseFrame;
pub fn rweb_websocket_message_to_tungstenite_message(rweb_message: rweb::ws::Message) -> tungstenite::Message {
if let Ok(text) = rweb_message.to_str() {
assert!(rweb_message.is_text());
return tungstenite::Message::Text(text.into());
}
if rweb_message.is_binary() {
return tungstenite::Message::Binary(rweb_message.into_bytes());
}
if rweb_message.is_ping() {
return tungstenite::Message::Ping(rweb_message.into_bytes());
}
if rweb_message.is_pong() {
return tungstenite::Message::Pong(rweb_message.into_bytes());
}
if rweb_message.is_close() {
return match rweb_message.close_frame() {
Some((code, reason)) => tungstenite::Message::Close(Some(CloseFrame {
code: code.into(),
reason: reason.to_string().into(),
})),
None => tungstenite::Message::Close(None),
};
}
unreachable!("Unknown type of rweb message: {:?}", rweb_message);
}
pub fn tungstenite_message_to_rweb_websocket_message(tungstenite_message: tungstenite::Message) -> rweb::ws::Message {
use tungstenite::Message::*;
match tungstenite_message {
Text(text) => rweb::ws::Message::text(text),
Binary(data) => rweb::ws::Message::binary(data),
Ping(data) => rweb::ws::Message::ping(data),
Pong(data) => rweb::ws::Message::pong(data),
Close(Some(frame)) => rweb::ws::Message::close_with(frame.code, frame.reason),
Close(None) => rweb::ws::Message::close(),
}
}