use crate::settings::pong_settings::PongSettings;
use log::info;
use robotech::settings::get_settings;
use robotech::web_server::WebServerSettings;
use serde::{Deserialize, Serialize};
use std::sync::OnceLock;
pub static SETTINGS: OnceLock<Settings> = OnceLock::new();
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "kebab-case")]
pub struct Settings {
pub pong: PongSettings,
#[serde(default = "WebServerSettings::default")]
pub web_server: WebServerSettings,
}
pub fn init_settings(path: Option<String>, port: Option<u16>) {
let mut settings = get_settings::<Settings>(path);
info!("检查命令行是否指定了一些参数,如果有,则以命令行指定的参数为准...");
if port.is_some() {
settings.web_server.port = port;
}
info!("检查配置是否符合规范...");
if settings.pong.task_groups.is_empty() {
panic!("尚未配置task_groups(任务组)项");
}
for task_group in settings.pong.task_groups.iter_mut() {
if task_group.tasks.is_empty() {
panic!("任务组尚未配置任务");
}
}
SETTINGS.set(settings).expect("无法设置配置信息");
}