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}
26
27#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
28pub struct Ping {
29 pub timestamp: u64,
30}
31
32#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
33pub struct Pong {
34 pub timestamp: u64,
35}
36
37impl Pong {
38 pub fn new(timestamp: u64) -> Self {
39 Self { timestamp }
40 }
41
42 pub fn default() -> Self {
43 Self { timestamp: 0 }
44 }
45
46 pub fn to_result(&self) -> Result<Vec<u8>, Box<dyn std::error::Error>> {
47 let data = serde_json::to_vec(self)?;
48 let data_length = data.len() as u32;
49
50 let mut result = vec![];
51 result.extend(&MAGIC_NUMBER); result.push(VERSION); result.push(CmdType::Ping as u8); result.extend(&data_length.to_be_bytes()); result.extend(data); Ok(result)
57 }
58}
59
60#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
61pub struct Authenticate {
62 pub secret: String,
63}
64
65#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
66pub struct ResultAuthenticate {
67 pub ok: bool,
68 pub msg: String,
69}
70
71impl ResultAuthenticate {
72 pub fn new(ok: bool, msg: String) -> Self {
73 Self { ok, msg }
74 }
75
76 pub fn to_result(&self) -> Result<Vec<u8>, Box<dyn std::error::Error>> {
77 let data = serde_json::to_vec(self)?;
78 let data_length = data.len() as u32;
79
80 let mut result = vec![];
81 result.extend(&MAGIC_NUMBER); result.push(VERSION); result.push(CmdType::Authenticate as u8); result.extend(&data_length.to_be_bytes()); result.extend(data); Ok(result)
87 }
88}
89
90#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
91pub struct Keys {
92 pub db: String,
93 pub page: usize,
94 pub size: usize,
95}
96
97#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
98pub struct ResultKeys {
99 pub keys: Vec<String>,
100 pub total: u32,
101}
102
103impl ResultKeys {
104 pub fn new(keys: Vec<String>, total: u32) -> Self {
105 Self { keys, total }
106 }
107
108 pub fn to_result(&self) -> Result<Vec<u8>, Box<dyn std::error::Error>> {
109 let data = serde_json::to_vec(self)?;
110 let data_length = data.len() as u32;
111
112 let mut result = vec![];
113 result.extend(&MAGIC_NUMBER); result.push(VERSION); result.push(CmdType::Keys as u8); result.extend(&data_length.to_be_bytes()); result.extend(data); Ok(result)
119 }
120}
121
122#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
123pub struct Exists {
124 pub db: String,
125 pub key: String,
126}
127
128#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
129pub struct ResultExists {
130 pub exists: bool,
131}
132
133impl ResultExists {
134 pub fn new(exists: bool) -> Self {
135 Self { exists }
136 }
137
138 pub fn to_result(&self) -> Result<Vec<u8>, Box<dyn std::error::Error>> {
139 let data = serde_json::to_vec(self)?;
140 let data_length = data.len() as u32;
141
142 let mut result = vec![];
143 result.extend(&MAGIC_NUMBER); result.extend(&VERSION.to_be_bytes()); result.push(CmdType::Exists as u8);
146 result.extend(&data_length.to_be_bytes()); result.extend(data); Ok(result)
150 }
151}
152
153#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
154pub struct Expire {
155 pub db: String,
156 pub key: String,
157 pub expire: u64,
158}
159
160#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
161pub struct ResultExpire {
162 pub ok: bool,
163}
164
165impl ResultExpire {
166 pub fn new(ok: bool) -> Self {
167 Self { ok }
168 }
169
170 pub fn to_result(&self) -> Result<Vec<u8>, Box<dyn std::error::Error>> {
171 let data = serde_json::to_vec(self)?;
172 let data_length = data.len() as u32;
173
174 let mut result = vec![];
175 result.extend(&MAGIC_NUMBER); result.extend(&VERSION.to_be_bytes()); result.push(CmdType::Expire as u8);
178 result.extend(&data_length.to_be_bytes()); result.extend(data); Ok(result)
182 }
183}