phoenix_channels/
message.rs

1use 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}