use std::io::stderr;
use clap::Parser;
use clap_verbosity_flag::Verbosity;
use pkgcraft::cli::colorize;
use pkgcraft::utils::bounded_thread_pool;
use pkgcruft_git::service::PkgcruftServiceBuilder;
use tracing_log::AsTrace;
#[derive(Parser)]
#[command(
name = env!("CARGO_BIN_NAME"),
version,
long_about = None,
disable_help_subcommand = true,
)]
pub(crate) struct Command {
#[command(flatten)]
verbosity: Verbosity,
#[command(flatten)]
color: colorchoice_clap::Color,
#[arg(short, long, default_value_t = num_cpus::get())]
jobs: usize,
#[arg(short, long, value_name = "IP:port")]
bind: Option<String>,
#[arg(short, long)]
temp: bool,
uri: String,
}
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let args = Command::parse();
args.color.write_global();
let level = args.verbosity.log_level_filter();
let subscriber = tracing_subscriber::fmt()
.with_max_level(level.as_trace())
.with_writer(stderr)
.with_ansi(colorize!(&stderr()));
subscriber.init();
bounded_thread_pool(args.jobs);
let mut service = PkgcruftServiceBuilder::new(&args.uri)
.jobs(args.jobs)
.temp(args.temp);
if let Some(value) = &args.bind {
service = service.socket(value);
}
service.start().await?;
Ok(())
}