67 lines
2.2 KiB
Rust
67 lines
2.2 KiB
Rust
use anyhow::Result;
|
|
use clap::Parser;
|
|
use ruvector_scipix::cli::{Cli, Commands};
|
|
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
|
|
|
|
#[tokio::main]
|
|
async fn main() -> Result<()> {
|
|
let cli = Cli::parse();
|
|
|
|
// Initialize logging based on verbosity
|
|
let log_level = if cli.quiet {
|
|
tracing::Level::ERROR
|
|
} else if cli.verbose {
|
|
tracing::Level::DEBUG
|
|
} else {
|
|
tracing::Level::INFO
|
|
};
|
|
|
|
tracing_subscriber::registry()
|
|
.with(
|
|
tracing_subscriber::EnvFilter::try_from_default_env()
|
|
.unwrap_or_else(|_| format!("{}={}", env!("CARGO_PKG_NAME"), log_level).into()),
|
|
)
|
|
.with(tracing_subscriber::fmt::layer())
|
|
.init();
|
|
|
|
// Execute the command
|
|
match &cli.command {
|
|
Commands::Ocr(args) => {
|
|
ruvector_scipix::cli::commands::ocr::execute(args.clone(), &cli).await?;
|
|
}
|
|
Commands::Batch(args) => {
|
|
ruvector_scipix::cli::commands::batch::execute(args.clone(), &cli).await?;
|
|
}
|
|
Commands::Serve(args) => {
|
|
ruvector_scipix::cli::commands::serve::execute(args.clone(), &cli).await?;
|
|
}
|
|
Commands::Mcp(args) => {
|
|
ruvector_scipix::cli::commands::mcp::run(args.clone()).await?;
|
|
}
|
|
Commands::Config(args) => {
|
|
ruvector_scipix::cli::commands::config::execute(args.clone(), &cli).await?;
|
|
}
|
|
Commands::Doctor(args) => {
|
|
ruvector_scipix::cli::commands::doctor::execute(args.clone()).await?;
|
|
}
|
|
Commands::Version => {
|
|
println!("scipix-cli v{}", env!("CARGO_PKG_VERSION"));
|
|
println!("A Rust-based CLI for Scipix OCR processing");
|
|
}
|
|
Commands::Completions { shell } => {
|
|
use clap::CommandFactory;
|
|
use clap_complete::{generate, Shell};
|
|
|
|
let shell = shell
|
|
.clone()
|
|
.unwrap_or_else(|| Shell::from_env().unwrap_or(Shell::Bash));
|
|
|
|
let mut cmd = Cli::command();
|
|
let bin_name = cmd.get_name().to_string();
|
|
generate(shell, &mut cmd, bin_name, &mut std::io::stdout());
|
|
}
|
|
}
|
|
|
|
Ok(())
|
|
}
|