akv/command/
mod.rs

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    Dbs = 0x06,
17    SetString = 0x11,
18    GetString = 0x12,
19    DelString = 0x13,
20    HashSet = 0x21,
21    HashGet = 0x22,
22    HashDel = 0x23,
23    HashExists = 0x24,
24    HashLen = 0x25,
25    HashFields = 0x26,
26    Error = 0xff,
27}
28
29#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
30pub struct Ping {
31    pub timestamp: u64,
32}
33
34#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
35pub struct Pong {
36    pub timestamp: u64,
37}
38
39impl Pong {
40    pub fn new(timestamp: u64) -> Self {
41        Self { timestamp }
42    }
43
44    pub fn default() -> Self {
45        Self { timestamp: 0 }
46    }
47
48    pub fn to_result(&self, seq: u32) -> Result<Vec<u8>, Box<dyn std::error::Error>> {
49        let data = serde_json::to_vec(self)?;
50        let data_length = data.len() as u32;
51
52        let mut result = vec![];
53        result.extend(&MAGIC_NUMBER); // 魔数
54        result.push(VERSION); // 版本
55        result.push(CmdType::Ping as u8); // Ping 命令结果
56        result.extend(&seq.to_be_bytes()); // 序列号
57        result.extend(&data_length.to_be_bytes()); // 长度
58        result.extend(data); // Pong 数据
59        Ok(result)
60    }
61}
62
63#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
64pub struct ResultError {
65    pub cmd: u8,
66    pub msg: String,
67}
68
69impl ResultError {
70    pub fn new(cmd: u8, msg: String) -> Self {
71        Self { cmd, msg }
72    }
73
74    pub fn to_result(&self, seq: u32) -> Result<Vec<u8>, Box<dyn std::error::Error>> {
75        let data = serde_json::to_vec(self)?;
76        let data_length = data.len() as u32;
77
78        let mut result = vec![];
79        result.extend(&MAGIC_NUMBER); // 魔数
80        result.extend(&VERSION.to_be_bytes()); // 版本
81        result.push(CmdType::Error as u8); // 错误
82        result.extend(&seq.to_be_bytes()); // 序列号
83        result.extend(&data_length.to_be_bytes()); // 长度
84        result.extend(data); // 错误数据
85        Ok(result)
86    }
87}
88
89#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
90pub struct Authenticate {
91    pub secret: String,
92}
93
94#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
95pub struct ResultAuthenticate {
96    pub ok: bool,
97    pub msg: String,
98}
99
100impl ResultAuthenticate {
101    pub fn new(ok: bool, msg: String) -> Self {
102        Self { ok, msg }
103    }
104
105    pub fn to_result(&self, seq: u32) -> Result<Vec<u8>, Box<dyn std::error::Error>> {
106        let data = serde_json::to_vec(self)?;
107        let data_length = data.len() as u32;
108
109        let mut result = vec![];
110        result.extend(&MAGIC_NUMBER); // 魔数
111        result.push(VERSION); // 版本
112        result.push(CmdType::Authenticate as u8); // Authenticate 命令结果
113        result.extend(&seq.to_be_bytes()); // 序列号
114        result.extend(&data_length.to_be_bytes()); // 长度
115        result.extend(data); // Authenticate 数据
116        Ok(result)
117    }
118}
119
120#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
121pub struct Keys {
122    pub db: String,
123    pub page: usize,
124    pub size: usize,
125}
126
127#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
128pub struct KeyInfo {
129    pub key: String,
130    pub typ: u8,
131}
132
133#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
134pub struct ResultKeys {
135    pub keys: Vec<KeyInfo>,
136    pub total: u32,
137}
138
139impl ResultKeys {
140    pub fn new(keys: Vec<KeyInfo>, total: u32) -> Self {
141        Self { keys, total }
142    }
143
144    pub fn to_result(&self, seq: u32) -> Result<Vec<u8>, Box<dyn std::error::Error>> {
145        let data = serde_json::to_vec(self)?;
146        let data_length = data.len() as u32;
147
148        let mut result = vec![];
149        result.extend(&MAGIC_NUMBER); // 魔数
150        result.push(VERSION); // 版本
151        result.push(CmdType::Keys as u8); // Keys 命令结果
152        result.extend(&seq.to_be_bytes()); // 序列号
153        result.extend(&data_length.to_be_bytes()); // 长度
154        result.extend(data); // Keys 数据
155        Ok(result)
156    }
157}
158
159#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
160pub struct Exists {
161    pub db: String,
162    pub key: String,
163}
164
165#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
166pub struct ResultExists {
167    pub exists: bool,
168}
169
170impl ResultExists {
171    pub fn new(exists: bool) -> Self {
172        Self { exists }
173    }
174
175    pub fn to_result(&self, seq: u32) -> Result<Vec<u8>, Box<dyn std::error::Error>> {
176        let data = serde_json::to_vec(self)?;
177        let data_length = data.len() as u32;
178
179        let mut result = vec![];
180        result.extend(&MAGIC_NUMBER); // 魔数
181        result.extend(&VERSION.to_be_bytes()); // 版本
182        result.push(CmdType::Exists as u8);
183        result.extend(&seq.to_be_bytes()); // 序列号
184        result.extend(&data_length.to_be_bytes()); // 数据长度
185        result.extend(data); // 数据
186
187        Ok(result)
188    }
189}
190
191#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
192pub struct Expire {
193    pub db: String,
194    pub key: String,
195    pub expire: u64,
196}
197
198#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
199pub struct ResultExpire {
200    pub ok: bool,
201}
202
203impl ResultExpire {
204    pub fn new(ok: bool) -> Self {
205        Self { ok }
206    }
207
208    pub fn to_result(&self, seq: u32) -> Result<Vec<u8>, Box<dyn std::error::Error>> {
209        let data = serde_json::to_vec(self)?;
210        let data_length = data.len() as u32;
211
212        let mut result = vec![];
213        result.extend(&MAGIC_NUMBER); // 魔数
214        result.extend(&VERSION.to_be_bytes()); // 版本
215        result.push(CmdType::Expire as u8);
216        result.extend(&seq.to_be_bytes()); // 序列号
217        result.extend(&data_length.to_be_bytes()); // 数据长度
218        result.extend(data); // 数据
219
220        Ok(result)
221    }
222}
223
224#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
225pub struct Dbs {
226    // 这个命令不需要参数
227}
228
229#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
230pub struct DbInfo {
231    pub name: String,
232    pub count: u32,
233}
234
235#[derive(Debug, Clone, Deserialize, Serialize, Encode, Decode)]
236pub struct ResultDbs {
237    pub dbs: Vec<DbInfo>,
238}
239
240impl ResultDbs {
241    pub fn new(dbs: Vec<DbInfo>) -> Self {
242        Self { dbs }
243    }
244
245    pub fn to_result(&self, seq: u32) -> Result<Vec<u8>, Box<dyn std::error::Error>> {
246        let data = serde_json::to_vec(self)?;
247        let data_length = data.len() as u32;
248
249        let mut result = vec![];
250        result.extend(&MAGIC_NUMBER); // 魔数
251        result.push(VERSION); // 版本
252        result.push(CmdType::Dbs as u8); // Dbs 命令结果
253        result.extend(&seq.to_be_bytes()); // 序列号
254        result.extend(&data_length.to_be_bytes()); // 长度
255        result.extend(data); // Dbs 数据
256        Ok(result)
257    }
258}