1pub mod error_code;
19pub mod message;
20pub mod notification;
21pub mod presence;
22pub mod protocol;
39pub mod rpc;
40pub mod version;
41
42pub use error_code::ErrorCode;
43pub use message::*;
44pub use notification::*;
45pub use presence::*;
46pub use protocol::*;
47pub use version::{PROTOCOL_VERSION, VERSION};
48
49pub fn decode_message<T>(payload: &[u8]) -> Result<T, Box<dyn std::error::Error>>
51where
52 T: serde::de::DeserializeOwned,
53{
54 let json_str = String::from_utf8(payload.to_vec())?;
55 let message: T = serde_json::from_str(&json_str)?;
56 Ok(message)
57}
58
59pub fn encode_message<T>(message: &T) -> Result<Vec<u8>, Box<dyn std::error::Error>>
61where
62 T: serde::Serialize,
63{
64 let json_str = serde_json::to_string(message)?;
65 Ok(json_str.into_bytes())
66}
67
68#[cfg(test)]
69mod tests {
70 use super::*;
71
72 #[test]
73 fn test_basic_message_creation() {
74 let mut connect_req = AuthorizationRequest::new();
76 connect_req.auth_token = "test_token".to_string();
77
78 let packet = connect_req.create_packet();
79 assert_eq!(packet.message_type, MessageType::AuthorizationRequest);
80 }
81
82 #[test]
83 fn test_message_types() {
84 assert_eq!(MessageType::AuthorizationRequest as u8, 1);
86 assert_eq!(MessageType::AuthorizationResponse as u8, 2);
87 assert_eq!(MessageType::DisconnectRequest as u8, 3);
88 assert_eq!(MessageType::DisconnectResponse as u8, 4);
89 assert_eq!(MessageType::SendMessageRequest as u8, 5);
90 assert_eq!(MessageType::SendMessageResponse as u8, 6);
91 assert_eq!(MessageType::PushMessageRequest as u8, 7);
92 assert_eq!(MessageType::PushMessageResponse as u8, 8);
93 assert_eq!(MessageType::PushBatchRequest as u8, 9); assert_eq!(MessageType::PushBatchResponse as u8, 10); assert_eq!(MessageType::PingRequest as u8, 11);
96 assert_eq!(MessageType::PongResponse as u8, 12);
97 assert_eq!(MessageType::SubscribeRequest as u8, 13);
98 assert_eq!(MessageType::SubscribeResponse as u8, 14);
99 assert_eq!(MessageType::PublishRequest as u8, 15); assert_eq!(MessageType::PublishResponse as u8, 16); }
102
103 #[test]
104 fn test_send_message() {
105 let mut send_req = SendMessageRequest::new();
106 send_req.from_uid = 123;
107 send_req.channel_id = 456;
108 send_req.payload = "Hello World".as_bytes().to_vec();
109
110 let packet = send_req.create_packet();
111 assert_eq!(packet.message_type, MessageType::SendMessageRequest);
112 }
113
114 #[test]
115 fn test_recv_message() {
116 let mut recv_req = PushMessageRequest::new();
117 recv_req.from_uid = 456;
118 recv_req.channel_id = 789;
119 recv_req.server_message_id = 100;
120 recv_req.payload = "Hello Back".as_bytes().to_vec();
121
122 let packet = recv_req.create_packet();
123 assert_eq!(packet.message_type, MessageType::PushMessageRequest);
124 }
125}