Improve CLI

This commit is contained in:
Jonas Zeunert
2024-04-22 23:09:20 +02:00
parent f6d6fd43d2
commit 2b6c363fca
3 changed files with 82 additions and 2 deletions

53
Cargo.lock generated
View File

@@ -126,6 +126,7 @@ checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80"
name = "awesm"
version = "0.1.0"
dependencies = [
"clap",
"env_logger",
"lazy_static",
"log",
@@ -248,6 +249,46 @@ version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e4de3bc4ea267985becf712dc6d9eed8b04c953b3fcfb339ebc87acd9804901"
[[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",
"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.0"
@@ -495,6 +536,12 @@ version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
[[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"
@@ -1236,6 +1283,12 @@ dependencies = [
"windows-sys 0.52.0",
]
[[package]]
name = "strsim"
version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "syn"
version = "2.0.60"

View File

@@ -6,6 +6,7 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
clap = { version = "4.5.4", features = ["derive"] }
env_logger = "0.11.3"
lazy_static = "1.4.0"
log = "0.4.21"

View File

@@ -1,14 +1,40 @@
use clap::Parser;
use log::info;
use std::net::{IpAddr, TcpListener};
mod options;
mod server;
mod elastic_query;
mod elastic_response;
#[derive(Parser, Debug)]
struct Args {
#[clap(short, long, default_value = "::1")]
bind_address: IpAddr,
#[clap(short, long, default_value_t = 9876)]
port: u16,
}
fn main() {
env_logger::init();
let args = Args::parse();
info!("Starting server...");
rouille::start_server("0.0.0.0:80", move |request| server::serve_request(request));
let next_free_port = find_available_port(args.bind_address, args.port);
rouille::start_server((args.bind_address, next_free_port), move |request| {
server::serve_request(request)
});
}
fn find_available_port(address: IpAddr, from: u16) -> u16 {
(from..u16::MAX)
.find(|port| match TcpListener::bind((address, *port)) {
Ok(_) => true,
Err(_) => false,
})
.unwrap_or_else(|| panic!("Could not find any available port starting from {}!", from))
}