summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs72
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();
}