42 lines
985 B
Rust
42 lines
985 B
Rust
use clap::Parser;
|
|
use log::info;
|
|
use std::net::{IpAddr, TcpListener};
|
|
|
|
mod options;
|
|
mod server;
|
|
|
|
mod elastic_query;
|
|
mod elastic_response;
|
|
mod search_result;
|
|
|
|
#[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();
|
|
let next_free_port = find_available_port(args.bind_address, args.port);
|
|
|
|
info!("Starting server on port {}...", next_free_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))
|
|
}
|