use clap::Parser;
use config::Config;
use std::ops::Deref;
pub struct GlobalConfig {
config: Config,
}
impl GlobalConfig {
pub fn new() -> GlobalConfig {
GlobalConfig {
config: init_config(),
}
}
}
impl Deref for GlobalConfig {
type Target = Config;
fn deref(&self) -> &Self::Target {
&self.config
}
}
#[cfg(feature = "clap")]
#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
pub struct Args {
#[arg(short, long, default_value = "application")]
pub config: String,
}
#[cfg(feature = "clap")]
pub fn init_config() -> Config {
let args = Args::parse();
Config::builder()
.add_source(config::File::with_name(&args.config))
.build()
.unwrap_or_else(|_| {
Config::builder()
.add_source(config::File::with_name("application"))
.build()
.expect("无法初始化配置 - 请确保 application.toml 文件存在")
})
}
#[cfg(not(feature = "clap"))]
pub fn init_config() -> Config {
Config::builder()
.add_source(config::File::with_name("application"))
.build()
.expect("无法初始化配置 - 请确俚 application.toml 文件存在")
}