use crate::config::core::{AppConfig, Environment};
use crate::error::QuickDbError;
use rat_logger::info;
use std::path::PathBuf;
#[derive(Debug)]
pub struct AppConfigBuilder {
name: Option<String>,
version: Option<String>,
environment: Option<Environment>,
debug: Option<bool>,
work_dir: Option<PathBuf>,
}
impl AppConfigBuilder {
pub fn new() -> Self {
Self {
name: None,
version: None,
environment: None,
debug: None,
work_dir: None,
}
}
pub fn name<S: Into<String>>(mut self, name: S) -> Self {
self.name = Some(name.into());
self
}
pub fn version<S: Into<String>>(mut self, version: S) -> Self {
self.version = Some(version.into());
self
}
pub fn environment(mut self, environment: Environment) -> Self {
self.environment = Some(environment);
self
}
pub fn debug(mut self, debug: bool) -> Self {
self.debug = Some(debug);
self
}
pub fn work_dir<P: Into<PathBuf>>(mut self, work_dir: P) -> Self {
self.work_dir = Some(work_dir.into());
self
}
pub fn build(self) -> Result<AppConfig, QuickDbError> {
let name = self
.name
.ok_or_else(|| crate::quick_error!(config, "应用名称必须设置"))?;
let version = self
.version
.ok_or_else(|| crate::quick_error!(config, "应用版本必须设置"))?;
let environment = self
.environment
.ok_or_else(|| crate::quick_error!(config, "环境类型必须设置"))?;
let debug = self
.debug
.ok_or_else(|| crate::quick_error!(config, "调试模式必须设置"))?;
let work_dir = self
.work_dir
.ok_or_else(|| crate::quick_error!(config, "工作目录必须设置"))?;
info!(
"创建应用配置: 名称={}, 版本={}, 环境={:?}",
name, version, environment
);
Ok(AppConfig {
name,
version,
environment,
debug,
work_dir,
})
}
}
impl Default for AppConfigBuilder {
fn default() -> Self {
Self::new()
}
}