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    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); // 魔数
52        result.push(VERSION); // 版本
53        result.push(CmdType::Ping as u8); // Ping 命令结果
54        result.extend(&data_length.to_be_bytes()); // 长度
55        result.extend(data); // Pong 数据
56        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); // 魔数
82        result.push(VERSION); // 版本
83        result.push(CmdType::Authenticate as u8); // Authenticate 命令结果
84        result.extend(&data_length.to_be_bytes()); // 长度
85        result.extend(data); // Authenticate 数据
86        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); // 魔数
114        result.push(VERSION); // 版本
115        result.push(CmdType::Keys as u8); // Keys 命令结果
116        result.extend(&data_length.to_be_bytes()); // 长度
117        result.extend(data); // Keys 数据
118        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); // 魔数
144        result.extend(&VERSION.to_be_bytes()); // 版本
145        result.push(CmdType::Exists as u8);
146        result.extend(&data_length.to_be_bytes()); // 数据长度
147        result.extend(data); // 数据
148
149        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); // 魔数
176        result.extend(&VERSION.to_be_bytes()); // 版本
177        result.push(CmdType::Expire as u8);
178        result.extend(&data_length.to_be_bytes()); // 数据长度
179        result.extend(data); // 数据
180
181        Ok(result)
182    }
183}