diff --git a/Cargo.lock b/Cargo.lock index aee8fe5..9030f8d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -63,6 +63,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "ansi_term" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +dependencies = [ + "winapi", +] + [[package]] name = "anyhow" version = "1.0.38" @@ -328,6 +337,17 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a" +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + [[package]] name = "autocfg" version = "1.0.1" @@ -488,6 +508,21 @@ dependencies = [ "generic-array", ] +[[package]] +name = "clap" +version = "2.33.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" +dependencies = [ + "ansi_term", + "atty", + "bitflags", + "strsim 0.8.0", + "textwrap", + "unicode-width", + "vec_map", +] + [[package]] name = "concurrent-queue" version = "1.2.2" @@ -645,7 +680,7 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "strsim", + "strsim 0.9.3", "syn", ] @@ -1114,6 +1149,7 @@ dependencies = [ "async-std", "base64 0.13.0", "cached", + "clap", "regex", "serde", "serde_json", @@ -1693,6 +1729,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + [[package]] name = "strsim" version = "0.9.3" @@ -1750,6 +1792,15 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + [[package]] name = "thiserror" version = "1.0.23" @@ -1938,6 +1989,12 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-width" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" + [[package]] name = "unicode-xid" version = "0.2.1" @@ -1989,6 +2046,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eafc1b9b2dfc6f5529177b62cf806484db55b32dc7c9658a118e11bbeb33061d" +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + [[package]] name = "version_check" version = "0.9.2" diff --git a/Cargo.toml b/Cargo.toml index 2989a0d..f6c62fb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,3 +19,4 @@ serde_json = "1.0.62" async-recursion = "0.3.2" regex = "1.4.3" time = "0.2.25" +clap = "2.33.3" diff --git a/src/main.rs b/src/main.rs index 44b0b2b..a9af4db 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,6 +8,7 @@ mod user; mod utils; // Import Crates +use clap::{App, Arg}; use tide::{ utils::{async_trait, After}, Middleware, Next, Request, Response, @@ -101,16 +102,31 @@ async fn favicon(_req: Request<()>) -> tide::Result { #[async_std::main] async fn main() -> tide::Result<()> { - let mut address = "0.0.0.0:8080".to_string(); - let mut force_https = false; + let matches = App::new("Libreddit") + .version(env!("CARGO_PKG_VERSION")) + .about("Private front-end for Reddit written in Rust ") + .arg( + Arg::with_name("address") + .short("a") + .long("address") + .value_name("ADDRESS") + .help("Sets address to listen on") + .default_value("0.0.0.0:8080") + .takes_value(true), + ) + .arg( + Arg::with_name("redirect-https") + .short("r") + .long("redirect-https") + .help("Redirect all HTTP requests to HTTPS") + .takes_value(false), + ) + .get_matches(); - for arg in std::env::args().collect::>() { - match arg.split('=').collect::>()[0] { - "--address" | "-a" => address = arg.split('=').collect::>()[1].to_string(), - "--redirect-https" | "-r" => force_https = true, - _ => (), - } - } + let address = matches.value_of("address").unwrap_or("0.0.0.0:8080"); + let force_https = matches.is_present("redirect-https"); + + dbg!(&force_https); // Start HTTP server println!("Running Libreddit v{} on {}!", env!("CARGO_PKG_VERSION"), &address);