mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-04-13 05:20:28 +08:00
72 lines
1.9 KiB
Rust
72 lines
1.9 KiB
Rust
use serde_yaml_ng::{Mapping, Value};
|
|
use smartstring::alias::String;
|
|
use std::collections::HashSet;
|
|
|
|
pub const HANDLE_FIELDS: [&str; 12] = [
|
|
"mode",
|
|
"redir-port",
|
|
"tproxy-port",
|
|
"mixed-port",
|
|
"socks-port",
|
|
"port",
|
|
"allow-lan",
|
|
"log-level",
|
|
"ipv6",
|
|
"external-controller",
|
|
"secret",
|
|
"unified-delay",
|
|
];
|
|
|
|
pub const DEFAULT_FIELDS: [&str; 5] = ["proxies", "proxy-providers", "proxy-groups", "rule-providers", "rules"];
|
|
|
|
pub fn use_lowercase(config: &Mapping) -> Mapping {
|
|
let mut ret = Mapping::new();
|
|
|
|
for (key, value) in config.into_iter() {
|
|
if let Some(key_str) = key.as_str() {
|
|
let mut key_str = String::from(key_str);
|
|
key_str.make_ascii_lowercase();
|
|
ret.insert(Value::from(key_str.as_str()), value.clone());
|
|
}
|
|
}
|
|
ret
|
|
}
|
|
|
|
pub fn use_sort(config: Mapping) -> Mapping {
|
|
let mut ret = Mapping::new();
|
|
HANDLE_FIELDS.into_iter().for_each(|key| {
|
|
let key = Value::from(key);
|
|
if let Some(value) = config.get(&key) {
|
|
ret.insert(key, value.clone());
|
|
}
|
|
});
|
|
|
|
let supported_keys: HashSet<&str> = HANDLE_FIELDS.into_iter().chain(DEFAULT_FIELDS).collect();
|
|
|
|
let config_keys: HashSet<&str> = config.keys().filter_map(|e| e.as_str()).collect();
|
|
|
|
config_keys.difference(&supported_keys).for_each(|&key| {
|
|
let key = Value::from(key);
|
|
if let Some(value) = config.get(&key) {
|
|
ret.insert(key, value.clone());
|
|
}
|
|
});
|
|
DEFAULT_FIELDS.into_iter().for_each(|key| {
|
|
let key = Value::from(key);
|
|
if let Some(value) = config.get(&key) {
|
|
ret.insert(key, value.clone());
|
|
}
|
|
});
|
|
|
|
ret
|
|
}
|
|
|
|
#[inline]
|
|
pub fn use_keys<'a>(config: &'a Mapping) -> impl Iterator<Item = String> + 'a {
|
|
config.iter().filter_map(|(key, _)| key.as_str()).map(|s: &str| {
|
|
let mut s: String = s.into();
|
|
s.make_ascii_lowercase();
|
|
s
|
|
})
|
|
}
|