mapuche_embedded/cmd/
scan.rs1use crate::Frame;
2
3use crate::cmd::Invalid;
4use crate::rocks::client::RocksClient;
5
6use serde::{Deserialize, Serialize};
7
8use crate::rocks::string::StringCommand;
9use crate::rocks::Result as RocksResult;
10use crate::utils::resp_invalid_arguments;
11
12#[derive(Serialize, Deserialize, Debug, Clone)]
13pub struct Scan {
14 start: String,
15 count: i64,
16 regex: String,
17 valid: bool,
18}
19
20impl Scan {
21 pub fn new(start: impl ToString, count: i64, regex: impl ToString) -> Scan {
22 Scan {
23 start: start.to_string(),
24 count,
25 regex: regex.to_string(),
26 valid: true,
27 }
28 }
29
30 pub fn valid(&self) -> bool {
31 self.valid
32 }
33
34 pub async fn execute(&mut self, client: &RocksClient) -> RocksResult<Frame> {
35 if !self.valid {
36 return Ok(resp_invalid_arguments());
37 }
38 StringCommand::new(client)
39 .scan(&self.start, self.count.try_into().unwrap(), &self.regex)
40 .await
41 }
42}
43
44impl Invalid for Scan {
45 fn new_invalid() -> Scan {
46 Scan {
47 start: "".to_owned(),
48 count: 0,
49 regex: "".to_owned(),
50 valid: false,
51 }
52 }
53}