Подобно тому, что предлагает @lbolla, вы можете загрузить файл конфигурации в строку текста YAML, а затем использовать serde_yaml::from_str(&str)
для его десериализации. Затем вы можете использовать функцию, которую я пишу ниже, чтобы развернуть переменные среды в формате ${}
в тексте. Наконец, вы можете записать развернутый текст в файл и использовать этот файл для инициализации ваших логгеров.
use std::env;
use regex::Regex;
use regex::Captures;
use std::borrow::Cow;
fn expand_var(raw_config: &str) -> Cow<str> {
let re = Regex::new(r"\$\{([a-zA-Z_][0-9a-zA-Z_]*)\}").unwrap();
re.replace_all(&raw_config, |caps: &Captures| {
match env::var(&caps[1]) {
Ok(val) => val,
Err(_) => (&caps[0]).to_string(),
}
})
}
Rust Playground