config_lite/parser/
mod.rs1use fancy_regex::Regex;
2
3use crate::{ConfigError, ConfigResult};
4
5pub mod json;
6pub mod yaml;
7
8pub(crate) fn get_value_from_env_var<'a, T: for<'de> serde::Deserialize<'de>>(
9 value: &str,
10) -> ConfigResult<T> {
11 let re = Regex::new(r"\{\{(\w+)\}\}").unwrap();
13 if let Ok(c) = re.captures(value) {
14 match c {
15 Some(c) => {
16 let env_var_name = c
17 .get(1)
18 .ok_or_else(|| ConfigError::RegexError(value.to_string()))?
19 .as_str();
20 let value = std::env::var(env_var_name)?;
22 let value = serde_json::Value::String(value);
23 Ok(serde_json::from_value(value)?)
24 }
25 None => {
26 let value = serde_json::Value::String(value.to_string());
27 Ok(serde_json::from_value(value)?)
28 }
29 }
30 } else {
31 Err(ConfigError::RegexError(value.into()))
32 }
33}