1pub mod hash;
2pub mod string;
3
4use bincode::{Decode, Encode};
5use serde::{Deserialize, Serialize};
6
7use crate::{MAGIC_NUMBER, VERSION};
8
9#[derive(Debug, Clone, PartialEq)]
10pub enum CmdType {
11 Ping = 0x01,
12 Authenticate = 0x02,
13 Keys = 0x03,
14 Exists = 0x04,
15 Expire = 0x05,
16 SetString = 0x11,
17 GetString = 0x12,
18 DelString = 0x13,
19 HashSet = 0x21,
20 HashGet = 0x22,
21 HashDel = 0x23,
22 HashExists = 0x24,
23 HashLen = 0x25,
24 HashFields = 0x26,
25 Error = 0xff,
26}
27
28#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
29pub struct Ping {
30 pub timestamp: u64,
31}
32
33#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
34pub struct Pong {
35 pub timestamp: u64,
36}
37
38impl Pong {
39 pub fn new(timestamp: u64) -> Self {
40 Self { timestamp }
41 }
42
43 pub fn default() -> Self {
44 Self { timestamp: 0 }
45 }
46
47 pub fn to_result(&self, seq: u32) -> Result<Vec<u8>, Box<dyn std::error::Error>> {
48 let data = serde_json::to_vec(self)?;
49 let data_length = data.len() as u32;
50
51 let mut result = vec![];
52 result.extend(&MAGIC_NUMBER); result.push(VERSION); result.push(CmdType::Ping as u8); result.extend(&seq.to_be_bytes()); result.extend(&data_length.to_be_bytes()); result.extend(data); Ok(result)
59 }
60}
61
62#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
63pub struct ResultError {
64 pub cmd: u8,
65 pub msg: String,
66}
67
68impl ResultError {
69 pub fn new(cmd: u8, msg: String) -> Self {
70 Self { cmd, msg }
71 }
72
73 pub fn to_result(&self, seq: u32) -> Result<Vec<u8>, Box<dyn std::error::Error>> {
74 let data = serde_json::to_vec(self)?;
75 let data_length = data.len() as u32;
76
77 let mut result = vec![];
78 result.extend(&MAGIC_NUMBER); result.extend(&VERSION.to_be_bytes()); result.push(CmdType::Error as u8); result.extend(&seq.to_be_bytes()); result.extend(&data_length.to_be_bytes()); result.extend(data); Ok(result)
85 }
86}
87
88#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
89pub struct Authenticate {
90 pub secret: String,
91}
92
93#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
94pub struct ResultAuthenticate {
95 pub ok: bool,
96 pub msg: String,
97}
98
99impl ResultAuthenticate {
100 pub fn new(ok: bool, msg: String) -> Self {
101 Self { ok, msg }
102 }
103
104 pub fn to_result(&self, seq: u32) -> Result<Vec<u8>, Box<dyn std::error::Error>> {
105 let data = serde_json::to_vec(self)?;
106 let data_length = data.len() as u32;
107
108 let mut result = vec![];
109 result.extend(&MAGIC_NUMBER); result.push(VERSION); result.push(CmdType::Authenticate as u8); result.extend(&seq.to_be_bytes()); result.extend(&data_length.to_be_bytes()); result.extend(data); Ok(result)
116 }
117}
118
119#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
120pub struct Keys {
121 pub db: String,
122 pub page: usize,
123 pub size: usize,
124}
125
126#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
127pub struct ResultKeys {
128 pub keys: Vec<String>,
129 pub total: u32,
130}
131
132impl ResultKeys {
133 pub fn new(keys: Vec<String>, total: u32) -> Self {
134 Self { keys, total }
135 }
136
137 pub fn to_result(&self, seq: u32) -> Result<Vec<u8>, Box<dyn std::error::Error>> {
138 let data = serde_json::to_vec(self)?;
139 let data_length = data.len() as u32;
140
141 let mut result = vec![];
142 result.extend(&MAGIC_NUMBER); result.push(VERSION); result.push(CmdType::Keys as u8); result.extend(&seq.to_be_bytes()); result.extend(&data_length.to_be_bytes()); result.extend(data); Ok(result)
149 }
150}
151
152#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
153pub struct Exists {
154 pub db: String,
155 pub key: String,
156}
157
158#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
159pub struct ResultExists {
160 pub exists: bool,
161}
162
163impl ResultExists {
164 pub fn new(exists: bool) -> Self {
165 Self { exists }
166 }
167
168 pub fn to_result(&self, seq: u32) -> Result<Vec<u8>, Box<dyn std::error::Error>> {
169 let data = serde_json::to_vec(self)?;
170 let data_length = data.len() as u32;
171
172 let mut result = vec![];
173 result.extend(&MAGIC_NUMBER); result.extend(&VERSION.to_be_bytes()); result.push(CmdType::Exists as u8);
176 result.extend(&seq.to_be_bytes()); result.extend(&data_length.to_be_bytes()); result.extend(data); Ok(result)
181 }
182}
183
184#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
185pub struct Expire {
186 pub db: String,
187 pub key: String,
188 pub expire: u64,
189}
190
191#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
192pub struct ResultExpire {
193 pub ok: bool,
194}
195
196impl ResultExpire {
197 pub fn new(ok: bool) -> Self {
198 Self { ok }
199 }
200
201 pub fn to_result(&self, seq: u32) -> Result<Vec<u8>, Box<dyn std::error::Error>> {
202 let data = serde_json::to_vec(self)?;
203 let data_length = data.len() as u32;
204
205 let mut result = vec![];
206 result.extend(&MAGIC_NUMBER); result.extend(&VERSION.to_be_bytes()); result.push(CmdType::Expire as u8);
209 result.extend(&seq.to_be_bytes()); result.extend(&data_length.to_be_bytes()); result.extend(data); Ok(result)
214 }
215}