use crate::env::ENV;
use config::Config;
use serde::Deserialize;
pub fn init_settings<'de, T: Deserialize<'de>>(path: Option<String>) -> T {
let config = Config::builder();
let config = if path.is_some() {
let path = path.unwrap();
if !std::path::Path::new(&path).exists() {
panic!("The specified configuration file does not exist");
}
config.add_source(config::File::with_name(path.as_str()).required(false))
} else {
let env = ENV.get().unwrap();
let path = env
.app_dir
.join(env.app_file_name.as_str())
.to_string_lossy()
.to_string();
config
.add_source(config::File::with_name(format!("{}.toml", path).as_str()).required(false))
.add_source(config::File::with_name(format!("{}.yml", path).as_str()).required(false))
.add_source(config::File::with_name(format!("{}.json", path).as_str()).required(false))
.add_source(config::File::with_name(format!("{}.ini", path).as_str()).required(false))
.add_source(config::File::with_name(format!("{}.ron", path).as_str()).required(false))
};
let config = config
.add_source(config::Environment::with_prefix("OSS"))
.build()
.unwrap();
config.try_deserialize::<T>().unwrap()
}