use clap::{Args, Subcommand}; use eyre::Result; use crate::atuin_client::record::sqlite_store::SqliteStore; use crate::atuin_client::settings::Settings; pub(crate) mod change_password; pub(crate) mod delete; pub(crate) mod login; pub(crate) mod logout; pub(crate) mod register; #[derive(Args, Debug)] pub(crate) struct Cmd { #[command(subcommand)] command: Commands, } #[derive(Subcommand, Debug)] pub(crate) enum Commands { /// Login to the configured server Login(login::Cmd), /// Register a new account Register(register::Cmd), /// Log out Logout, /// Delete your account, and all synced data Delete(delete::Cmd), /// Change your password ChangePassword(change_password::Cmd), } impl Cmd { pub(crate) async fn run(self, settings: Settings, store: SqliteStore) -> Result<()> { match self.command { Commands::Login(l) => l.run(&settings, &store).await, Commands::Register(r) => r.run(&settings).await, Commands::Logout => logout::run().await, Commands::Delete(d) => d.run(&settings).await, Commands::ChangePassword(c) => c.run(&settings).await, } } }