1use std::env;
2
3use anyhow::Result;
4
5use super::{
6 AuthConfig, CodecConfig, HttpConfig, TransportConfig, UserConfig,
7 codec_flags::load_media_codec_flags, codec_preferences::load_codec_preferences,
8 diagnostics::DiagnosticsConfig, env::Env, feature_flags::load_runtime_feature_flags,
9 settings::Config, telemetry::load_telemetry_config,
10};
11
12impl Config {
13 pub fn from_env() -> Result<Self> {
21 Self::from_var_lookup(|key| env::var(key).ok())
22 }
23
24 fn from_var_lookup(get_var: impl Fn(&str) -> Option<String>) -> Result<Self> {
25 let env = Env::new(get_var);
26 let http = HttpConfig::from_env(&env)?;
27 let auth = AuthConfig::from_env(&env)?;
28 let user = UserConfig::from_env(&env)?;
29 let feature_flags = load_runtime_feature_flags(&env)?;
30 let codec_flags = load_media_codec_flags(&env)?;
31 let codec_preferences = load_codec_preferences(&env)?;
32 let diagnostics = DiagnosticsConfig::from_env(&env)?;
33 let telemetry = load_telemetry_config(&env)?;
34 let transport = TransportConfig::from_env(&env)?;
35 Ok(Self {
36 auth,
37 http,
38 user,
39 transport,
40 codecs: CodecConfig {
41 flags: codec_flags,
42 preferences: codec_preferences,
43 },
44 features: feature_flags,
45 telemetry,
46 diagnostics,
47 })
48 }
49}
50
51#[cfg(test)]
52#[path = "TESTS/loader.rs"]
53mod tests;