diff --git a/Cargo.lock b/Cargo.lock index e44e22f..4304ec5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -50,61 +50,43 @@ dependencies = [ "libc", ] -[[package]] -name = "anstream" -version = "0.6.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" - -[[package]] -name = "anstyle-parse" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" -dependencies = [ - "anstyle", - "windows-sys 0.52.0", -] - [[package]] name = "anyhow" version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +[[package]] +name = "argh" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7af5ba06967ff7214ce4c7419c7d185be7ecd6cc4965a8f6e1d8ce0398aad219" +dependencies = [ + "argh_derive", + "argh_shared", +] + +[[package]] +name = "argh_derive" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56df0aeedf6b7a2fc67d06db35b09684c3e8da0c95f8f27685cb17e08413d87a" +dependencies = [ + "argh_shared", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "argh_shared" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5693f39141bda5760ecc4111ab08da40565d1771038c4a0250f03457ec707531" +dependencies = [ + "serde", +] + [[package]] name = "async-recursion" version = "1.1.1" @@ -211,7 +193,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00c055ee2d014ae5981ce1016374e8213682aa14d9bf40e48ab48b5f3ef20eaa" dependencies = [ - "heck 0.4.1", + "heck", "proc-macro2", "quote", "syn", @@ -249,11 +231,11 @@ name = "breeze" version = "0.2.4" dependencies = [ "anyhow", + "argh", "async-recursion", "atomic-time", "axum", "bytes", - "clap", "dashmap", "http", "img-parts", @@ -308,52 +290,6 @@ dependencies = [ "windows-targets 0.52.5", ] -[[package]] -name = "clap" -version = "4.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_derive" -version = "4.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "clap_lex" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" - -[[package]] -name = "colorchoice" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" - [[package]] name = "core-foundation-sys" version = "0.8.6" @@ -596,12 +532,6 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - [[package]] name = "hermit-abi" version = "0.3.9" @@ -757,12 +687,6 @@ dependencies = [ "serde", ] -[[package]] -name = "is_terminal_polyfill" -version = "1.70.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" - [[package]] name = "itoa" version = "1.0.11" @@ -1487,12 +1411,6 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" -[[package]] -name = "utf8parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" - [[package]] name = "valuable" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 54b1221..f0181cf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,22 +5,22 @@ edition = "2021" [dependencies] axum = { version = "0.7.5", features = ["macros", "http2"] } +tower = "0.4.13" http = "1.1.0" tokio = { version = "1", features = ["full"] } tokio-util = { version = "0.7.4", features = ["full"] } tokio-stream = "0.1" -tower = "0.4.13" -bytes = "1" -rand = "0.8.5" -async-recursion = "1.0.0" -walkdir = "2" tracing = "0.1" tracing-subscriber = "0.3" +bytes = "1" +async-recursion = "1.0.0" +rand = "0.8.5" +walkdir = "2" +anyhow = "1.0" serde = { version = "1.0", features = ["derive"] } serde_with = "3.4.0" toml = "0.8.2" -clap = { version = "4.4.6", features = ["derive"] } -anyhow = "1.0" +argh = "0.1.12" dashmap = { version = "5.5.3", features = ["rayon", "inline"] } rayon = "1.8" atomic-time = "0.1.4" diff --git a/src/main.rs b/src/main.rs index 0a1eee0..88c8a4d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,6 @@ use std::{path::PathBuf, sync::Arc}; -use clap::Parser; +use argh::FromArgs; use engine::Engine; use axum::{ @@ -18,24 +18,29 @@ mod index; mod new; mod view; -#[derive(Parser, Debug)] +/// breeze file server. +#[derive(FromArgs, Debug)] struct Args { - /// The path to configuration file - #[arg(short, long, value_name = "file")] + /// the path to *.toml configuration file + #[argh(option, short = 'c', arg_name = "file")] config: PathBuf, } #[tokio::main] async fn main() { // read & parse args - let args = Args::parse(); + let args: Args = argh::from_env(); // read & parse config - let config_str = fs::read_to_string(args.config) - .await - .expect("failed to read config file! make sure it exists and you have read permissions"); + let cfg: config::Config = { + let config_str = fs::read_to_string(args.config).await.expect( + "failed to read config file! make sure it exists and you have read permissions", + ); - let cfg: config::Config = toml::from_str(&config_str).expect("invalid config! check that you have included all required options and structured it properly (no config options expecting a number getting a string, etc.)"); + toml::from_str(&config_str).unwrap_or_else(|e| { + panic!("invalid config! ensure proper fields and structure. reference config is in readme.\n{e}"); + }) + }; tracing_subscriber::fmt() .with_max_level(cfg.logger.level)