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

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))
}