1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
use config::{Config, Environment, File};
use serde::de::DeserializeOwned;

/// Gets app settings.
/// Will parse ``Settings.toml`` which may be overriden by environmental
/// variables starting with ``{crate_name}_``. One example is
/// ``MY_APP_LOG_LEVEL=debug``.
pub fn get_settings<T: DeserializeOwned>(prefix: String) -> T {
    let mut settings = Config::default();

    settings
        .merge(File::with_name("Settings").required(false))
        .expect("Failed to parse settings file")
        .merge(Environment::with_prefix(&prefix))
        .expect("Failed to parse settings env");

    settings.try_into().expect("Invalid settings")
}