Accept y/n, True/False, 1/0 as booleans in environment vars

This commit is contained in:
Daniel García 2020-01-20 22:28:54 +01:00
parent 84ed185579
commit d212dfe735
No known key found for this signature in database
GPG Key ID: FC8A7D14C3CD543A
2 changed files with 19 additions and 4 deletions

View File

@ -2,7 +2,7 @@ use std::process::exit;
use std::sync::RwLock; use std::sync::RwLock;
use crate::error::Error; use crate::error::Error;
use crate::util::get_env; use crate::util::{get_env, get_env_bool};
lazy_static! { lazy_static! {
pub static ref CONFIG: Config = Config::load().unwrap_or_else(|e| { pub static ref CONFIG: Config = Config::load().unwrap_or_else(|e| {
@ -23,7 +23,7 @@ macro_rules! make_config {
$group:ident $(: $group_enabled:ident)? { $group:ident $(: $group_enabled:ident)? {
$( $(
$(#[doc = $doc:literal])+ $(#[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<Inner> } pub struct Config { inner: RwLock<Inner> }
@ -50,9 +50,9 @@ macro_rules! make_config {
let mut builder = ConfigBuilder::default(); let mut builder = ConfigBuilder::default();
$($( $($(
builder.$name = get_env(&stringify!($name).to_uppercase()); builder.$name = make_config! { @getenv &stringify!($name).to_uppercase(), $ty };
)+)+ )+)+
builder builder
} }
@ -189,6 +189,10 @@ macro_rules! make_config {
let f: &dyn Fn(&ConfigItems) -> _ = &$default_fn; let f: &dyn Fn(&ConfigItems) -> _ = &$default_fn;
f($config) f($config)
}}; }};
( @getenv $name:expr, bool ) => { get_env_bool($name) };
( @getenv $name:expr, $ty:ident ) => { get_env($name) };
} }
//STRUCTURE: //STRUCTURE:

View File

@ -309,6 +309,17 @@ where
try_parse_string(env::var(key)) 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<bool> {
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 // Date util methods
// //