|
1 | 1 | use async_trait::async_trait; |
| 2 | +use clap::Parser; |
2 | 3 | use config::{Config, Environment, File}; |
3 | 4 | use serde::Deserialize; |
4 | 5 | use futures::stream; |
@@ -26,6 +27,23 @@ use crate::db::DB; |
26 | 27 | use crate::parser as argus_parser; |
27 | 28 | use crate::query::{Statement, execute_plan}; |
28 | 29 |
|
| 30 | +/// ArgusDB Server |
| 31 | +#[derive(Parser, Debug)] |
| 32 | +#[command(author, version, about, long_about = None, disable_help_flag = true)] |
| 33 | +struct Args { |
| 34 | + /// Host to bind to |
| 35 | + #[arg(short = 'h', long)] |
| 36 | + host: Option<String>, |
| 37 | + |
| 38 | + /// Port to bind to |
| 39 | + #[arg(short, long)] |
| 40 | + port: Option<u16>, |
| 41 | + |
| 42 | + /// Print help |
| 43 | + #[arg(long, action = clap::ArgAction::Help)] |
| 44 | + help: Option<bool>, |
| 45 | +} |
| 46 | + |
29 | 47 | #[derive(Debug, Deserialize)] |
30 | 48 | struct Settings { |
31 | 49 | #[serde(default = "default_host")] |
@@ -160,13 +178,20 @@ impl PgWireServerHandlers for ArgusProcessor { |
160 | 178 |
|
161 | 179 | #[tokio::main] |
162 | 180 | async fn main() { |
163 | | - let settings = Config::builder() |
| 181 | + let args = Args::parse(); |
| 182 | + |
| 183 | + let mut builder = Config::builder() |
164 | 184 | .add_source(File::with_name("argusdb").required(false)) |
165 | | - .add_source(Environment::with_prefix("ARGUS")) |
166 | | - .build() |
167 | | - .unwrap() |
168 | | - .try_deserialize::<Settings>() |
169 | | - .unwrap(); |
| 185 | + .add_source(Environment::with_prefix("ARGUS")); |
| 186 | + |
| 187 | + if let Some(host) = args.host { |
| 188 | + builder = builder.set_override("host", host).unwrap(); |
| 189 | + } |
| 190 | + if let Some(port) = args.port { |
| 191 | + builder = builder.set_override("port", port).unwrap(); |
| 192 | + } |
| 193 | + |
| 194 | + let settings: Settings = builder.build().unwrap().try_deserialize().unwrap(); |
170 | 195 |
|
171 | 196 | let db = Arc::new(Mutex::new(DB::new("argus_data"))); |
172 | 197 | let handler = Arc::new(ArgusHandler::new(db)); |
|
0 commit comments