use anyhow::Result;
use clap::Parser;
use tracing::{error, instrument, level_filters::LevelFilter};
use tracing_subscriber::{self, Layer, layer::SubscriberExt, util::SubscriberInitExt};
use utpm::{
args::{ARGS, get_args},
commands::{self, Cli, Commands, PackagesArgs, ProjectArgs},
utils::{
dryrun::get_dry_run,
output::{OutputFormat, get_output_format},
state::UtpmError,
},
utpm_log,
};
#[instrument]
#[tokio::main]
async fn main() {
ARGS.set(Cli::parse()).expect("ARGS should still be empty");
let x = get_args();
if get_dry_run() {
utpm_log!(info, "Using dry-run")
}
if get_output_format() != OutputFormat::Text {
tracing_subscriber::registry()
.with(
tracing_subscriber::fmt::layer()
.json()
.with_filter(LevelFilter::from_level(x.verbose)),
)
.init();
} else {
tracing_subscriber::registry()
.with(tracing_subscriber::fmt::layer().with_filter(LevelFilter::from_level(x.verbose)))
.init();
}
let res = async move {
match &x.command {
Commands::Project(w) => match w {
ProjectArgs::Link(cmd) => commands::link::run(cmd, &None, true).await,
ProjectArgs::Init(cmd) => commands::init::run(&mut cmd.clone()).await,
ProjectArgs::Clone(cmd) => commands::clone::run(cmd).await,
ProjectArgs::Bump(cmd) => commands::bump::run(cmd).await,
ProjectArgs::Sync(cmd) => commands::sync::run(cmd).await,
ProjectArgs::Publish(cmd) => commands::publish::run(cmd).await,
ProjectArgs::Metadata(cmd) => commands::metadata::run(cmd).await,
},
Commands::Packages(p) => match p {
PackagesArgs::List(cmd) => commands::list::run(cmd).await,
PackagesArgs::Path => commands::package_path::run().await,
PackagesArgs::Unlink(cmd) => commands::unlink::run(cmd).await,
PackagesArgs::Get(cmd) => commands::get::run(cmd).await,
PackagesArgs::Install(cmd) => commands::install::run(cmd).await,
},
Commands::Generate(cmd) => commands::generate::run(cmd).await,
}
}
.await;
if let Err(err) = res {
match check_errors(err) {
Ok(_) => (),
Err(err2) => error!("{err2}"), };
}
}
fn check_errors(err: UtpmError) -> Result<()> {
utpm_log!(@f error, "{err}");
Ok(())
}