Skip to content

Commit

Permalink
Merge pull request #1244 from janost/read-config-from-files
Browse files Browse the repository at this point in the history
Read config vars from files
  • Loading branch information
dani-garcia authored Nov 29, 2020
2 parents be1ddb4 + e8ef76b commit 9824d94
Showing 1 changed file with 21 additions and 4 deletions.
25 changes: 21 additions & 4 deletions src/util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -283,20 +283,37 @@ where

use std::env;

pub fn get_env_str_value(key: &str) -> Option<String>
{
let key_file = format!("{}_FILE", key);
let value_from_env = env::var(key);
let value_file = env::var(&key_file);

match (value_from_env, value_file) {
(Ok(_), Ok(_)) => panic!("You should not define both {} and {}!", key, key_file),
(Ok(v_env), Err(_)) => Some(v_env),
(Err(_), Ok(v_file)) => match fs::read_to_string(v_file) {
Ok(content) => Some(content.trim().to_string()),
Err(e) => panic!("Failed to load {}: {:?}", key, e)
},
_ => None
}
}

pub fn get_env<V>(key: &str) -> Option<V>
where
V: FromStr,
{
try_parse_string(env::var(key).ok())
try_parse_string(get_env_str_value(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),
match get_env_str_value(key) {
Some(val) if TRUE_VALUES.contains(&val.to_lowercase().as_ref()) => Some(true),
Some(val) if FALSE_VALUES.contains(&val.to_lowercase().as_ref()) => Some(false),
_ => None,
}
}
Expand Down

0 comments on commit 9824d94

Please sign in to comment.