Skip to main content

o_sfu/config/
loader.rs

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    /// # Errors
14    ///
15    /// Returns an error when a required operator environment variable is
16    /// missing, an environment value cannot be parsed, a constrained value is
17    /// outside its accepted range, telemetry export is requested without the
18    /// required cargo feature, or transport cross-field validation rejects the
19    /// advertised address, RTC port range, worker count, or room policy.
20    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;