raspberry_web/
settings.rs1use clap::ArgMatches;
2use config::{Config, ConfigError, File};
3
4#[derive(Debug, Serialize, Deserialize)]
6pub struct Webserver {
7 pub hostname: String,
8 pub port: i32,
9}
10
11#[derive(Debug, Serialize, Deserialize)]
12pub struct Database {
13 pub database_url: String,
14}
15
16#[derive(Debug, Serialize, Deserialize)]
17pub struct GpioConfig {
18 pub gpios_in_use: Option<Vec<i32>>,
19 pub gpios_mode_output: Option<Vec<i32>>,
20 pub gpios_mode_input: Option<Vec<i32>>,
21 pub gpios_level_low: Option<Vec<i32>>,
22 pub gpios_level_high: Option<Vec<i32>>,
23}
24
25#[derive(Debug, Serialize, Deserialize)]
26pub struct Settings {
27 pub webserver: Webserver,
28 pub database: Database,
29 pub gpioconfig: GpioConfig,
30}
31
32impl Settings {
33 pub fn new(args: ArgMatches) -> Result<Self, ConfigError> {
34 let mut settings = Config::new();
35
36 #[cfg(debug_assertions)]
38 let default_config_file = "config/dev-configuration.toml";
39
40 #[cfg(not(debug_assertions))]
42 let default_config_file = "/usr/local/raspberry-web/configuration.toml";
43
44 let config_file = args.value_of("config-file").unwrap_or(default_config_file);
46
47 settings.merge(File::with_name(config_file))?;
48 settings.try_into()
49 }
50}