1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
use config::{Config, ConfigError, File};
use serde::Deserialize;

#[derive(Debug, Deserialize)]
#[allow(unused)]
pub struct AmberConfig {
    pub base_url: String,
}

#[derive(Debug, Deserialize)]
#[allow(unused)]
pub struct ApiToken {
    pub name: String,
    pub psk: String,
}

#[derive(Debug, Deserialize)]
#[allow(unused)]
pub struct AppConfig {
    pub amberconfig: AmberConfig,
    pub userconfig: UserConfig,
    pub apitoken: ApiToken,
}

#[derive(Debug, Deserialize)]
#[allow(unused)]
pub struct UserConfig {
    pub state: String,
}

impl AppConfig {
    pub async fn get(app_config_file: String) -> Result<Self, ConfigError> {
        let config = Config::builder()
            .add_source(File::with_name(&app_config_file))
            .build()?;

        config.try_deserialize()
    }
}