mapuche_embedded/cmd/
scan.rs

1use 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}