use clap::ArgMatches;
use config::{Config, ConfigError, File};
#[derive(Debug, Serialize, Deserialize)]
pub struct Webserver {
pub hostname: String,
pub port: i32,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Database {
pub database_url: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct GpioConfig {
pub gpios_in_use: Option<Vec<i32>>,
pub gpios_mode_output: Option<Vec<i32>>,
pub gpios_mode_input: Option<Vec<i32>>,
pub gpios_level_low: Option<Vec<i32>>,
pub gpios_level_high: Option<Vec<i32>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Settings {
pub webserver: Webserver,
pub database: Database,
pub gpioconfig: GpioConfig,
}
impl Settings {
pub fn new(args: ArgMatches) -> Result<Self, ConfigError> {
let mut settings = Config::new();
#[cfg(debug_assertions)]
let default_config_file = "config/dev-configuration.toml";
#[cfg(not(debug_assertions))]
let default_config_file = "/usr/local/raspberry-web/configuration.toml";
let config_file = args.value_of("config-file").unwrap_or(default_config_file);
settings.merge(File::with_name(config_file))?;
settings.try_into()
}
}