Improve CLI
This commit is contained in:
30
src/main.rs
30
src/main.rs
@@ -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))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user