use std::{path::PathBuf, time::Instant}; use argh::FromArgs; use theseus::modpack::{fetch_modpack, pack::ModpackSide}; #[derive(FromArgs)] /// Simple modpack download struct ModpackDownloader { /// where to download to #[argh(positional)] url: String, /// where to put the resulting pack #[argh(option, short = 'o')] output: Option, /// the sha1 hash, if you want it checked #[argh(option, short = 'c')] hash: Option, /// use verbose logging #[argh(switch, short = 'v')] verbose: bool, } // Simple logging helper fn debug(msg: &str, verbose: bool) { if verbose { println!("{}", msg); } } #[tokio::main] pub async fn main() { let args = argh::from_env::(); let dest = args.output.unwrap_or(PathBuf::from("./pack-download/")); debug( &format!( "Downloading pack {} to {}", args.url, dest.to_str().unwrap_or("?") ), args.verbose, ); let start = Instant::now(); fetch_modpack(&args.url, args.hash.as_deref(), &dest, ModpackSide::Client).await; let end = start.elapsed(); println!("Download completed in {} seconds", end.as_secs_f32()); debug("Done!", args.verbose); }