pakker/src/main.rs
NotAShelf 34976a66d2
treewide: general cleanup
Finally had the time to clean up after myself. Does a bunch of things,
without breakage as far as I'm aware. I've removed around 20 unnecessary
clones, and simplified the architechture a little bit. 

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I4d22337b997a3bf5b0593e6068cd1bd86a6a6964
2026-02-27 21:55:59 +03:00

179 lines
4.9 KiB
Rust

// Allow pre-existing clippy warnings for functions with many arguments
// and complex types that would require significant refactoring
#![allow(clippy::too_many_arguments)]
#![allow(clippy::type_complexity)]
#![allow(clippy::large_enum_variant)]
mod cli;
mod error;
mod export;
mod fetch;
mod git;
mod http;
mod ipc;
mod model;
mod platform;
mod rate_limiter;
mod resolver;
mod ui_utils;
mod utils;
use std::path::PathBuf;
use clap::Parser;
use cli::{Cli, Commands};
use error::PakkerError;
#[tokio::main]
async fn main() -> Result<(), PakkerError> {
let cli = Cli::parse();
// Initialize logging based on verbosity level
let log_level = match cli.verbose {
0 => "warn", // Default: only warnings and errors
1 => "info", // -v: info level
2 => "debug", // -vv: debug level
_ => "trace", // -vvv+: trace level (most verbose)
};
env_logger::Builder::from_env(
env_logger::Env::default().default_filter_or(log_level),
)
.format_timestamp(None)
.format_module_path(false)
.init();
let working_dir = PathBuf::from(".");
let lockfile_path = working_dir.join("pakker-lock.json");
let config_path = working_dir.join("pakker.json");
match cli.command {
Commands::Init(args) => {
cli::commands::init::execute(args, &lockfile_path, &config_path).await
},
Commands::Import(args) => {
cli::commands::import::execute(args, &lockfile_path, &config_path).await
},
Commands::Add(args) => {
cli::commands::add::execute(args, &lockfile_path, &config_path).await
},
Commands::AddPrj(args) => {
cli::commands::add_prj::execute(
args.curseforge,
args.modrinth,
args.github,
args.project_type,
args.side,
args.strategy,
args.redistributable,
args.subpath,
args.aliases,
args.export,
args.no_deps,
args.yes,
&lockfile_path,
&config_path,
)
.await
},
Commands::Rm(args) => {
cli::commands::rm::execute(args, &lockfile_path, &config_path).await
},
Commands::Update(args) => {
cli::commands::update::execute(args, &lockfile_path, &config_path).await
},
Commands::Ls(args) => cli::commands::ls::execute(args, &lockfile_path),
Commands::Set(args) => {
cli::commands::set::execute(args, &lockfile_path, &config_path).await
},
Commands::Link(args) => cli::commands::link::execute(args, &lockfile_path),
Commands::Unlink(args) => {
cli::commands::unlink::execute(args, &lockfile_path)
},
Commands::Diff(args) => cli::commands::diff::execute(args, &lockfile_path),
Commands::Fetch(args) => {
cli::commands::fetch::execute(args, &lockfile_path, &config_path).await
},
Commands::Sync(args) => {
cli::commands::sync::execute(args, &lockfile_path, &config_path).await
},
Commands::Export(args) => {
cli::commands::export::execute(args, &lockfile_path, &config_path).await
},
Commands::Remote(args) => cli::commands::remote::execute(args).await,
Commands::RemoteUpdate(args) => {
cli::commands::remote_update::execute(args).await
},
Commands::Status(args) => {
cli::commands::status::execute(
args.parallel,
&lockfile_path,
&config_path,
)
.await
},
Commands::Inspect(args) => {
cli::commands::inspect::execute(
args.projects,
&lockfile_path,
&config_path,
)
.await
},
Commands::Credentials(args) => {
match args.subcommand {
Some(cli::CredentialsSubcommand::Set(set_args)) => {
cli::commands::credentials_set::execute(
set_args.cf_api_key,
set_args.modrinth_token,
set_args.gh_access_token,
)
},
None => {
cli::commands::credentials::execute(
args.delete,
args.delete_file,
args.delete_keyring,
)
},
}
},
Commands::Cfg(args) => {
match args.subcommand {
Some(cli::CfgSubcommand::Prj(prj_args)) => {
cli::commands::cfg_prj::execute(
&config_path,
&lockfile_path,
prj_args.project,
prj_args.r#type.as_deref(),
prj_args.side.as_deref(),
prj_args.update_strategy.as_deref(),
prj_args.redistributable,
prj_args.subpath,
prj_args.add_alias,
prj_args.remove_alias,
prj_args.export,
)
},
None => {
cli::commands::cfg::execute(
&config_path,
args.name,
args.version,
args.description,
args.author,
args.mods_path,
args.resource_packs_path,
args.data_packs_path,
args.worlds_path,
args.shaders_path,
)
},
}
},
Commands::Fork(args) => {
cli::commands::fork::execute(&args)?;
Ok(())
},
}
}