fjall-cli 1.0.1

CLI for Fjall database
Documentation
use errgonomic::map_err;
use fjall::Database;
use std::process::ExitCode;
use thiserror::Error;

use KeyspaceSubcommand::*;

#[derive(clap::Parser, Clone, Debug)]
pub struct KeyspaceCommand {
    #[arg(value_name = "KEYSPACE")]
    keyspace: String,

    #[command(subcommand)]
    subcommand: KeyspaceSubcommand,
}

#[derive(clap::Subcommand, Clone, Debug)]
pub enum KeyspaceSubcommand {
    Iter(IterCommand),
    Get(GetCommand),
    Insert(InsertCommand),
    Contains(ContainsCommand),
    Len(LenCommand),
    Clear(ClearCommand),
    Delete(DeleteCommand),
}

impl KeyspaceCommand {
    pub async fn run(self, db: &Database) -> Result<ExitCode, KeyspaceCommandRunError> {
        use KeyspaceCommandRunError::*;
        let Self {
            keyspace,
            subcommand,
        } = self;
        match subcommand {
            Iter(command) => map_err!(command.run(db, keyspace).await, RunIterCommandFailed),
            Get(command) => map_err!(command.run(db, keyspace).await, RunGetCommandFailed),
            Insert(command) => map_err!(command.run(db, keyspace).await, RunInsertCommandFailed),
            Contains(command) => map_err!(command.run(db, keyspace).await, RunContainsCommandFailed),
            Len(command) => map_err!(command.run(db, keyspace).await, RunLenCommandFailed),
            Clear(command) => map_err!(command.run(db, keyspace).await, RunClearCommandFailed),
            Delete(command) => map_err!(command.run(db, keyspace).await, RunDeleteCommandFailed),
        }
    }
}

#[derive(Error, Debug)]
pub enum KeyspaceCommandRunError {
    #[error("failed to run iter command")]
    RunIterCommandFailed { source: IterCommandRunError },

    #[error("failed to run get command")]
    RunGetCommandFailed { source: GetCommandRunError },

    #[error("failed to run insert command")]
    RunInsertCommandFailed { source: InsertCommandRunError },

    #[error("failed to run contains command")]
    RunContainsCommandFailed { source: ContainsCommandRunError },

    #[error("failed to run len command")]
    RunLenCommandFailed { source: LenCommandRunError },

    #[error("failed to run clear command")]
    RunClearCommandFailed { source: ClearCommandRunError },

    #[error("failed to run delete command")]
    RunDeleteCommandFailed { source: DeleteCommandRunError },
}

mod iter_command;
pub use iter_command::*;

mod get_command;
pub use get_command::*;

mod insert_command;
pub use insert_command::*;

mod contains_command;
pub use contains_command::*;

mod len_command;
pub use len_command::*;

mod clear_command;
pub use clear_command::*;

mod delete_command;
pub use delete_command::*;