phoenix_channels/
message.rs1use serde_json;
2use websocket::OwnedMessage;
3use websocket::result::WebSocketResult;
4
5use event::EventKind;
6use error::MessageError;
7
8
9#[derive(Debug, Serialize, Deserialize)]
10pub struct PhoenixMessage
11{
12 join_ref: Option<u32>,
13 message_ref: u32,
14 topic: String,
15 event: EventKind,
16 payload: serde_json::Value,
17}
18
19
20#[derive(Debug)]
21pub enum Message {
22 Json(PhoenixMessage),
23 Binary,
24 Close,
25 Ping,
26 Pong,
27}
28
29
30impl Message {
31 pub fn from_owned(owned: OwnedMessage) -> Result<Self, MessageError> {
32 let message = match owned {
33 OwnedMessage::Text(text) => Message::Json(serde_json::from_str(&text)?),
34 OwnedMessage::Binary(_) => Message::Binary,
35 OwnedMessage::Close(_) => Message::Close,
36 OwnedMessage::Ping(_) => Message::Ping,
37 OwnedMessage::Pong(_) => Message::Pong,
38 };
39
40 return Ok(message);
41 }
42
43 pub fn from_result(result: WebSocketResult<OwnedMessage>) -> Result<Self, MessageError> {
44 return Message::from_owned(result?);
45 }
46}