cataclysm_ws/
message.rs

1/// Message structure contained in a frame
2pub enum Message {
3    /// Text message
4    Text(String),
5    /// Binary message
6    Binary(Vec<u8>),
7    /// Ping message
8    Ping(Vec<u8>),
9    /// Pong message
10    Pong(Vec<u8>),
11    /// Close message
12    Close
13}
14
15impl Message {
16    /// Geneates an instances of the [Message::Text](Message::Text) variant
17    pub fn text<A: Into<String>>(text: A) -> Message {
18        Message::Text(text.into())
19    }
20
21    /// Geneates an instances of the [Message::Binary](Message::Binary) variant
22    pub fn binary<A: Into<Vec<u8>>>(bytes: A) -> Message {
23        Message::Binary(bytes.into())
24    }
25
26    /// Geneates an instances of the [Message::Binary](Message::Binary) variant
27    pub fn ping<A: Into<Vec<u8>>>(payload: A) -> Message {
28        Message::Ping(payload.into())
29    }
30
31    /// Geneates an instances of the [Message::Binary](Message::Binary) variant
32    pub fn pong<A: Into<Vec<u8>>>(payload: A) -> Message {
33        Message::Pong(payload.into())
34    }
35
36    /// Indicates if the variant equates de [Message::Close](Message::Close) variant
37    pub fn is_close(&self) -> bool {
38        matches!(&self, Message::Close)
39    }
40
41    /// Indicates if the variant equates de [Message::Ping](Message::Ping) variant
42    pub fn is_ping(&self) -> bool {
43        matches!(&self, Message::Ping(_))
44    }
45
46    /// Indicates if the variant equates de [Message::Pong](Message::Pong) variant
47    pub fn is_pong(&self) -> bool {
48        matches!(&self, Message::Pong(_))
49    }
50}
51
52impl From<Message> for Vec<u8> {
53    fn from(source: Message) -> Vec<u8> {
54        match source {
55            Message::Text(content) => content.into(),
56            Message::Binary(content) => content,
57            Message::Ping(content) => content,
58            Message::Pong(content) => content,
59            Message::Close => vec![]
60        }
61    }
62}