From a6fc93504050f2701f88f008f3bb7ae4ac4b2033 Mon Sep 17 00:00:00 2001 From: Lev Kokotov Date: Mon, 21 Feb 2022 20:41:32 -0800 Subject: [PATCH] Can pass config path as argument (#36) * show better errors for config parsing * lint --- src/config.rs | 17 ++++++++++++++--- src/main.rs | 10 +++++++++- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/config.rs b/src/config.rs index 221fb66..04a8162 100644 --- a/src/config.rs +++ b/src/config.rs @@ -172,7 +172,7 @@ pub async fn parse(path: &str) -> Result<(), Error> { let mut file = match File::open(path).await { Ok(file) => file, Err(err) => { - error!("{:?}", err); + error!("Could not open '{}': {}", path, err.to_string()); return Err(Error::BadConfig); } }; @@ -180,7 +180,7 @@ pub async fn parse(path: &str) -> Result<(), Error> { match file.read_to_string(&mut contents).await { Ok(_) => (), Err(err) => { - error!("{:?}", err); + error!("Could not read config file: {}", err.to_string()); return Err(Error::BadConfig); } }; @@ -188,7 +188,7 @@ pub async fn parse(path: &str) -> Result<(), Error> { let config: Config = match toml::from_str(&contents) { Ok(config) => config, Err(err) => { - error!("{:?}", err); + error!("Could not parse config file: {}", err.to_string()); return Err(Error::BadConfig); } }; @@ -200,6 +200,17 @@ pub async fn parse(path: &str) -> Result<(), Error> { let mut dup_check = HashSet::new(); let mut primary_count = 0; + match shard.0.parse::() { + Ok(_) => (), + Err(_) => { + error!( + "Shard '{}' is not a valid number, shards must be numbered starting at 0", + shard.0 + ); + return Err(Error::BadConfig); + } + }; + if shard.1.servers.len() == 0 { error!("Shard {} has no servers configured", shard.0); return Err(Error::BadConfig); diff --git a/src/main.rs b/src/main.rs index 65a12c9..72767c1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -75,8 +75,16 @@ async fn main() { return; } + let args = std::env::args().collect::>(); + + let config_file = if args.len() == 2 { + args[1].to_string() + } else { + String::from("pgcat.toml") + }; + // Prepare the config - match config::parse("pgcat.toml").await { + match config::parse(&config_file).await { Ok(_) => (), Err(err) => { error!("Config parse error: {:?}", err);