pub mod age;
pub mod cli;
pub mod commands;
pub mod config;
pub mod enclave;
pub mod error;
pub mod git;
pub mod sops;
pub mod ui;
use clap::Parser;
use crate::cli::{Cli, Command};
use crate::error::Result;
use crate::ui::Ui;
pub fn run() -> Result<()> {
let cli = Cli::parse();
let ui = Ui::new(
cli.global.resolve_color(),
cli.global.verbose,
cli.global.resolve_interactive(),
);
dispatch(&ui, cli.command)
}
fn dispatch(ui: &Ui, command: Command) -> Result<()> {
match command {
Command::Init(args) => commands::init::run(ui, &args),
Command::Doctor => commands::doctor::run(ui),
Command::Edit(args) => commands::edit::run(ui, &args),
Command::Join(args) => commands::join::run(ui, &args),
Command::Approve(args) => commands::approve::run(ui, &args),
Command::Recipient(cmd) => commands::recipient::run(ui, &cmd),
Command::Check => commands::check::run(ui),
Command::Deps(args) => commands::deps::run(ui, &args),
Command::Completion(args) => commands::completion::run(&args),
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::cli::InitArgs;
fn test_ui() -> Ui {
Ui::new(false, false, false)
}
#[test]
fn dispatch_doctor_is_ok() {
assert!(dispatch(&test_ui(), Command::Doctor).is_ok());
}
#[test]
fn dispatch_stub_commands_are_ok() {
let ui = test_ui();
assert!(dispatch(&ui, Command::Check).is_ok());
assert!(
dispatch(
&ui,
Command::Init(InitArgs {
recipient_name: None,
username: None,
public_key: None,
no_generate: true,
break_glass: false,
no_break_glass: true,
force: false,
})
)
.is_err()
);
}
}