diff options
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 72 |
1 files changed, 61 insertions, 11 deletions
diff --git a/src/main.rs b/src/main.rs index 9d1fdcf..a381e28 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,18 +1,68 @@ mod server; use std::env; -use std::path::Path; - -fn read_config() -> server::ServerConfig { - let mut config = server::ServerConfig::new( - "klockenschooster.de".to_string(), - "/home/jw/code/projects/sheldond/doc".to_string(), - ); - config.add_addr("127.0.0.1:1965".to_string()); - config.add_addr("[::1]:1965".to_string()); - return config; + +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"); +} + +fn parse_args() -> Option<server::ServerConfig> { + let mut has_addr = false; + let mut has_host = false; + let mut has_root = 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; + } + } + None => break, + } + } + + if !has_addr || !has_host || !has_root { + return None; + } + + Some(config) } fn main() { - let server = server::Server::new(&read_config()); + let config = match parse_args() { + Some(config) => config, + None => { + help(); + return; + } + }; + + let server = server::Server::new(&config); server.serve(); } |
