mod mime; mod server; use std::env; fn help() { let version = match option_env!("CARGO_PKG_VERSION") { Some(v) => v, None => "", }; println!("usage: sheldond {}", version); println!(" -h, --help\t\tdisplay this message"); println!(" -l, --listen\t\tadd a listening address (you can define multiple)"); println!(" -d, --default-host\tdefault hostname to listen for"); println!(" -g, --gem-root\tpath to the gemini root, aka the folder to serve files from"); println!(" --user\tuser to drop to after opening TLS socket"); println!(" --group\tgroup to drop to after opening TLS socket"); } fn parse_args() -> Option { let mut has_addr = false; let mut has_host = false; let mut has_root = false; let mut has_user = false; let mut has_group = false; let mut config = server::ServerConfig::new(); let mut args = env::args(); loop { match args.next() { Some(arg) => { if arg == "-h" || arg == "--help" { return None; } if arg == "-l" || arg == "--listen" { let addr = args.next().unwrap(); config.add_addr(addr); has_addr = true; } if arg == "-d" || arg == "--default-host" { let host = args.next().unwrap(); config.set_default_host(host); has_host = true; } if arg == "-g" || arg == "--gem-root" { let gem_root = args.next().unwrap(); config.set_gem_root(gem_root); has_root = true; } if arg == "--user" { let user = args.next().unwrap(); config.set_user(user); has_user = true; } if arg == "--group" { let group = args.next().unwrap(); config.set_group(group); has_group = true; } } None => break, } } if !has_addr || !has_host || !has_root || !has_user || !has_group { return None; } Some(config) } fn main() { let config = match parse_args() { Some(config) => config, None => { help(); return; } }; let server = server::Server::new(&config); server.serve(); }