fix: field sort for filter
This commit is contained in:
parent
d191877002
commit
c5289dc0e8
@ -1,4 +1,5 @@
|
|||||||
use serde_yaml::{Mapping, Value};
|
use serde_yaml::{Mapping, Value};
|
||||||
|
use std::collections::HashSet;
|
||||||
|
|
||||||
pub const HANDLE_FIELDS: [&str; 9] = [
|
pub const HANDLE_FIELDS: [&str; 9] = [
|
||||||
"mode",
|
"mode",
|
||||||
@ -102,7 +103,7 @@ pub fn use_lowercase(config: Mapping) -> Mapping {
|
|||||||
ret
|
ret
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn use_sort(config: Mapping) -> Mapping {
|
pub fn use_sort(config: Mapping, enable_filter: bool) -> Mapping {
|
||||||
let mut ret = Mapping::new();
|
let mut ret = Mapping::new();
|
||||||
|
|
||||||
HANDLE_FIELDS
|
HANDLE_FIELDS
|
||||||
@ -115,6 +116,28 @@ pub fn use_sort(config: Mapping) -> Mapping {
|
|||||||
ret.insert(key, value.clone());
|
ret.insert(key, value.clone());
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if !enable_filter {
|
||||||
|
let supported_keys: HashSet<&str> = HANDLE_FIELDS
|
||||||
|
.into_iter()
|
||||||
|
.chain(OTHERS_FIELDS)
|
||||||
|
.chain(DEFAULT_FIELDS)
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
let config_keys: HashSet<&str> = config
|
||||||
|
.keys()
|
||||||
|
.filter_map(|e| e.as_str())
|
||||||
|
.into_iter()
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
config_keys.difference(&supported_keys).for_each(|&key| {
|
||||||
|
let key = Value::from(key);
|
||||||
|
config.get(&key).map(|value| {
|
||||||
|
ret.insert(key, value.clone());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
ret
|
ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,7 +116,7 @@ pub fn enhance() -> (Mapping, Vec<String>, HashMap<String, ResultLog>) {
|
|||||||
|
|
||||||
config = use_filter(config, &clash_fields, enable_filter);
|
config = use_filter(config, &clash_fields, enable_filter);
|
||||||
config = use_tun(config, enable_tun);
|
config = use_tun(config, enable_tun);
|
||||||
config = use_sort(config);
|
config = use_sort(config, enable_filter);
|
||||||
|
|
||||||
let mut exists_set = HashSet::new();
|
let mut exists_set = HashSet::new();
|
||||||
exists_set.extend(exists_keys.into_iter().filter(|s| clash_fields.contains(s)));
|
exists_set.extend(exists_keys.into_iter().filter(|s| clash_fields.contains(s)));
|
||||||
|
Loading…
Reference in New Issue
Block a user