Private
Public Access
1
0
Files
Kordophone/kpcli/src/main.rs
2025-06-06 16:39:31 -07:00

70 lines
1.6 KiB
Rust

mod client;
mod daemon;
mod db;
mod printers;
use anyhow::Result;
use clap::{Parser, Subcommand};
use log::LevelFilter;
/// A command line interface for the Kordophone library and daemon
#[derive(Parser)]
#[command(name = "kpcli")]
struct Cli {
#[command(subcommand)]
command: Commands,
}
#[derive(Subcommand)]
enum Commands {
/// Commands for api client operations
Client {
#[command(subcommand)]
command: client::Commands,
},
/// Commands for the cache database
Db {
#[command(subcommand)]
command: db::Commands,
},
/// Commands for interacting with the daemon
Daemon {
#[command(subcommand)]
command: daemon::Commands,
},
}
async fn run_command(command: Commands) -> Result<()> {
match command {
Commands::Client { command } => client::Commands::run(command).await,
Commands::Db { command } => db::Commands::run(command).await,
Commands::Daemon { command } => daemon::Commands::run(command).await,
}
}
fn initialize_logging() {
// Weird: is this the best way to do this?
let log_level = std::env::var("RUST_LOG")
.map(|s| s.parse::<LevelFilter>().unwrap_or(LevelFilter::Info))
.unwrap_or(LevelFilter::Info);
env_logger::Builder::from_default_env()
.format_timestamp_secs()
.filter_level(log_level)
.init();
}
#[tokio::main]
async fn main() {
initialize_logging();
let cli = Cli::parse();
run_command(cli.command)
.await
.map_err(|e| println!("Error: {}", e))
.err();
}