wsio_core/packet/
mod.rs

1use serde::{
2    Deserialize,
3    Serialize,
4};
5use serde_repr::{
6    Deserialize_repr,
7    Serialize_repr,
8};
9use serde_with::skip_serializing_none;
10
11pub mod codecs;
12
13#[repr(u8)]
14#[derive(Clone, Debug, Deserialize_repr, Serialize_repr)]
15pub enum WsIoPacketType {
16    Auth = 0,
17    Disconnect = 1,
18    Event = 2,
19    Init = 3,
20    Ready = 4,
21}
22
23#[skip_serializing_none]
24#[derive(Clone, Debug, Deserialize, Serialize)]
25pub struct WsIoPacket {
26    #[serde(rename = "d")]
27    pub data: Option<Vec<u8>>,
28
29    #[serde(rename = "k")]
30    pub key: Option<String>,
31
32    #[serde(rename = "t")]
33    pub r#type: WsIoPacketType,
34}
35
36impl WsIoPacket {
37    #[inline]
38    pub fn new(r#type: WsIoPacketType, key: Option<String>, data: Option<Vec<u8>>) -> Self {
39        Self { data, key, r#type }
40    }
41
42    // Public methods
43
44    #[inline]
45    pub fn new_disconnect() -> Self {
46        Self::new(WsIoPacketType::Disconnect, None, None)
47    }
48
49    #[inline]
50    pub fn new_event(event: impl Into<String>, data: Option<Vec<u8>>) -> Self {
51        Self::new(WsIoPacketType::Event, Some(event.into()), data)
52    }
53
54    #[inline]
55    pub fn new_init(data: Vec<u8>) -> Self {
56        Self::new(WsIoPacketType::Init, None, Some(data))
57    }
58
59    #[inline]
60    pub fn new_ready() -> Self {
61        Self::new(WsIoPacketType::Ready, None, None)
62    }
63}