use serde::{Deserialize, Serialize}; use serde_yaml::Mapping; use std::collections::HashMap; #[derive(Default, Debug, Clone, Deserialize, Serialize)] pub struct IRuntime { pub config: Option, // 记录在配置中(包括merge和script生成的)出现过的keys // 这些keys不一定都生效 pub exists_keys: Vec, pub chain_logs: HashMap>, } impl IRuntime { pub fn new() -> Self { Self::default() } // 这里只更改 allow-lan | ipv6 | log-level pub fn patch_config(&mut self, patch: Mapping) { if let Some(config) = self.config.as_mut() { ["allow-lan", "ipv6", "log-level"] .into_iter() .for_each(|key| { if let Some(value) = patch.get(key).to_owned() { config.insert(key.into(), value.clone()); } }); } } }