From d212dfe735e59128667a4c579e52ce7e86b53a94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa?= Date: Mon, 20 Jan 2020 22:28:54 +0100 Subject: [PATCH] Accept y/n, True/False, 1/0 as booleans in environment vars --- src/config.rs | 12 ++++++++---- src/util.rs | 11 +++++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/config.rs b/src/config.rs index 3eed93bc..a3dde70c 100644 --- a/src/config.rs +++ b/src/config.rs @@ -2,7 +2,7 @@ use std::process::exit; use std::sync::RwLock; use crate::error::Error; -use crate::util::get_env; +use crate::util::{get_env, get_env_bool}; lazy_static! { pub static ref CONFIG: Config = Config::load().unwrap_or_else(|e| { @@ -23,7 +23,7 @@ macro_rules! make_config { $group:ident $(: $group_enabled:ident)? { $( $(#[doc = $doc:literal])+ - $name:ident : $ty:ty, $editable:literal, $none_action:ident $(, $default:expr)?; + $name:ident : $ty:ident, $editable:literal, $none_action:ident $(, $default:expr)?; )+}, )+) => { pub struct Config { inner: RwLock } @@ -50,9 +50,9 @@ macro_rules! make_config { let mut builder = ConfigBuilder::default(); $($( - builder.$name = get_env(&stringify!($name).to_uppercase()); + builder.$name = make_config! { @getenv &stringify!($name).to_uppercase(), $ty }; )+)+ - + builder } @@ -189,6 +189,10 @@ macro_rules! make_config { let f: &dyn Fn(&ConfigItems) -> _ = &$default_fn; f($config) }}; + + ( @getenv $name:expr, bool ) => { get_env_bool($name) }; + ( @getenv $name:expr, $ty:ident ) => { get_env($name) }; + } //STRUCTURE: diff --git a/src/util.rs b/src/util.rs index 01862f9c..7782f1d1 100644 --- a/src/util.rs +++ b/src/util.rs @@ -309,6 +309,17 @@ where try_parse_string(env::var(key)) } +const TRUE_VALUES: &[&str] = &["true", "t", "yes", "y", "1"]; +const FALSE_VALUES: &[&str] = &["false", "f", "no", "n", "0"]; + +pub fn get_env_bool(key: &str) -> Option { + match env::var(key) { + Ok(val) if TRUE_VALUES.contains(&val.to_lowercase().as_ref()) => Some(true), + Ok(val) if FALSE_VALUES.contains(&val.to_lowercase().as_ref()) => Some(false), + _ => None, + } +} + // // Date util methods //