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