use config::{Config, ConfigError, Environment, File};
use log::info;
use serde::Deserialize;
#[derive(Debug, Deserialize)]
#[allow(unused)]
pub struct Logs {
pub path: String,
pub files: usize,
}
#[derive(Debug, Deserialize)]
#[allow(unused)]
pub struct MQTT {
pub host: String,
pub port: u16,
pub topic: String,
}
#[derive(Debug, Deserialize)]
#[allow(unused)]
pub struct Settings {
pub debug: bool,
pub mqtt: MQTT,
pub logs: Logs,
}
impl Settings {
pub fn new(cfg_file: String) -> Result<Self, ConfigError> {
let cfg_file_path = if cfg_file.is_empty() {
"config/default"
} else {
&cfg_file
};
info!("Config file as {:?}", cfg_file_path);
let s = Config::builder()
.add_source(File::with_name(cfg_file_path))
.add_source(Environment::with_prefix("app"))
.build()?;
s.try_deserialize()
}
}