diff --git a/futriix-server/src/main.rs b/futriix-server/src/main.rs index de892fa..6d0ac2f 100644 --- a/futriix-server/src/main.rs +++ b/futriix-server/src/main.rs @@ -4,15 +4,44 @@ use server::*; use std::fs; use toml::Value; use simplelog::*; +use clap::Parser; + +#[derive(Parser, Debug)] +#[command(author, version, about, long_about = None)] +struct Args { + /// Port to listen on + #[arg(short, long, default_value_t = 8080)] + port: u16, + + /// Replication peer address + #[arg(long)] + replication_peer: Option, + + /// Config file path + #[arg(short, long, default_value = "futriix.config.toml")] + config: String, +} #[tokio::main] async fn main() -> Result<(), Box> { + let args = Args::parse(); + // Read config - let config_content = fs::read_to_string("futriix.config.toml")?; - let config: Value = toml::from_str(&config_content)?; + let config_content = fs::read_to_string(&args.config)?; + let mut config: Value = toml::from_str(&config_content)?; + + // Override config with command line args + if let Some(peer) = args.replication_peer { + config["replication"]["enabled"] = Value::Boolean(true); + if let Some(peers) = config["replication"]["peer_nodes"].as_array_mut() { + peers.push(Value::String(peer)); + } else { + config["replication"]["peer_nodes"] = Value::Array(vec![Value::String(peer)]); + } + } let ip = config["server"]["ip"].as_str().unwrap_or("127.0.0.1"); - let port = config["server"]["port"].as_integer().unwrap_or(8080) as u16; + let port = args.port; let log_path = config["server"]["log_path"].as_str().unwrap_or("futriix.log"); // Initialize logger @@ -32,7 +61,7 @@ async fn main() -> Result<(), Box> { ])?; // Start server - let server = FutriixServer::new(); + let server = FutriixServer::new(&config); let addr = format!("{}:{}", ip, port); server.run(&addr).await?;