Skip to main content

fjall_cli/command/
keyspace_command.rs

1use errgonomic::map_err;
2use fjall::Database;
3use std::process::ExitCode;
4use thiserror::Error;
5
6use KeyspaceSubcommand::*;
7
8#[derive(clap::Parser, Clone, Debug)]
9pub struct KeyspaceCommand {
10    #[arg(value_name = "KEYSPACE")]
11    keyspace: String,
12
13    #[command(subcommand)]
14    subcommand: KeyspaceSubcommand,
15}
16
17#[derive(clap::Subcommand, Clone, Debug)]
18pub enum KeyspaceSubcommand {
19    Iter(IterCommand),
20    Get(GetCommand),
21    Insert(InsertCommand),
22    Contains(ContainsCommand),
23    Len(LenCommand),
24    Clear(ClearCommand),
25    Delete(DeleteCommand),
26}
27
28impl KeyspaceCommand {
29    pub async fn run(self, db: &Database) -> Result<ExitCode, KeyspaceCommandRunError> {
30        use KeyspaceCommandRunError::*;
31        let Self {
32            keyspace,
33            subcommand,
34        } = self;
35        match subcommand {
36            Iter(command) => map_err!(command.run(db, keyspace).await, RunIterCommandFailed),
37            Get(command) => map_err!(command.run(db, keyspace).await, RunGetCommandFailed),
38            Insert(command) => map_err!(command.run(db, keyspace).await, RunInsertCommandFailed),
39            Contains(command) => map_err!(command.run(db, keyspace).await, RunContainsCommandFailed),
40            Len(command) => map_err!(command.run(db, keyspace).await, RunLenCommandFailed),
41            Clear(command) => map_err!(command.run(db, keyspace).await, RunClearCommandFailed),
42            Delete(command) => map_err!(command.run(db, keyspace).await, RunDeleteCommandFailed),
43        }
44    }
45}
46
47#[derive(Error, Debug)]
48pub enum KeyspaceCommandRunError {
49    #[error("failed to run iter command")]
50    RunIterCommandFailed { source: IterCommandRunError },
51
52    #[error("failed to run get command")]
53    RunGetCommandFailed { source: GetCommandRunError },
54
55    #[error("failed to run insert command")]
56    RunInsertCommandFailed { source: InsertCommandRunError },
57
58    #[error("failed to run contains command")]
59    RunContainsCommandFailed { source: ContainsCommandRunError },
60
61    #[error("failed to run len command")]
62    RunLenCommandFailed { source: LenCommandRunError },
63
64    #[error("failed to run clear command")]
65    RunClearCommandFailed { source: ClearCommandRunError },
66
67    #[error("failed to run delete command")]
68    RunDeleteCommandFailed { source: DeleteCommandRunError },
69}
70
71mod iter_command;
72pub use iter_command::*;
73
74mod get_command;
75pub use get_command::*;
76
77mod insert_command;
78pub use insert_command::*;
79
80mod contains_command;
81pub use contains_command::*;
82
83mod len_command;
84pub use len_command::*;
85
86mod clear_command;
87pub use clear_command::*;
88
89mod delete_command;
90pub use delete_command::*;