Files
awesm-server/src/main.rs

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