refactor: update function signatures to use references for Mapping and String

This commit is contained in:
Tunglies 2025-11-20 21:49:16 +08:00
parent fcc1d4f9b5
commit 5a677fbbeb
No known key found for this signature in database
GPG Key ID: B9B01B389469B3E8
4 changed files with 19 additions and 19 deletions

View File

@ -25,14 +25,14 @@ pub const DEFAULT_FIELDS: [&str; 5] = [
"rules", "rules",
]; ];
pub fn use_lowercase(config: Mapping) -> Mapping { pub fn use_lowercase(config: &Mapping) -> Mapping {
let mut ret = Mapping::new(); let mut ret = Mapping::new();
for (key, value) in config.into_iter() { for (key, value) in config.into_iter() {
if let Some(key_str) = key.as_str() { if let Some(key_str) = key.as_str() {
let mut key_str = String::from(key_str); let mut key_str = String::from(key_str);
key_str.make_ascii_lowercase(); key_str.make_ascii_lowercase();
ret.insert(Value::from(key_str.as_str()), value); ret.insert(Value::from(key_str.as_str()), value.clone());
} }
} }
ret ret

View File

@ -14,7 +14,7 @@ fn deep_merge(a: &mut Value, b: &Value) {
} }
} }
pub fn use_merge(merge: Mapping, config: Mapping) -> Mapping { pub fn use_merge(merge: &Mapping, config: Mapping) -> Mapping {
let mut config = Value::from(config); let mut config = Value::from(config);
let merge = use_lowercase(merge); let merge = use_lowercase(merge);
@ -61,7 +61,7 @@ fn test_merge() -> anyhow::Result<()> {
let merge = serde_yaml_ng::from_str::<Mapping>(merge)?; let merge = serde_yaml_ng::from_str::<Mapping>(merge)?;
let config = serde_yaml_ng::from_str::<Mapping>(config)?; let config = serde_yaml_ng::from_str::<Mapping>(config)?;
let _ = serde_yaml_ng::to_string(&use_merge(merge, config))?; let _ = serde_yaml_ng::to_string(&use_merge(&merge, config))?;
Ok(()) Ok(())
} }

View File

@ -325,19 +325,19 @@ fn process_global_items(
mut config: Mapping, mut config: Mapping,
global_merge: ChainItem, global_merge: ChainItem,
global_script: ChainItem, global_script: ChainItem,
profile_name: String, profile_name: &String,
) -> (Mapping, Vec<String>, HashMap<String, ResultLog>) { ) -> (Mapping, Vec<String>, HashMap<String, ResultLog>) {
let mut result_map = HashMap::new(); let mut result_map = HashMap::new();
let mut exists_keys = use_keys(&config); let mut exists_keys = use_keys(&config);
if let ChainType::Merge(merge) = global_merge.data { if let ChainType::Merge(merge) = global_merge.data {
exists_keys.extend(use_keys(&merge)); exists_keys.extend(use_keys(&merge));
config = use_merge(merge, config.to_owned()); config = use_merge(&merge, config.to_owned());
} }
if let ChainType::Script(script) = global_script.data { if let ChainType::Script(script) = global_script.data {
let mut logs = vec![]; let mut logs = vec![];
match use_script(script, config.to_owned(), profile_name) { match use_script(script, &config, profile_name) {
Ok((res_config, res_logs)) => { Ok((res_config, res_logs)) => {
exists_keys.extend(use_keys(&res_config)); exists_keys.extend(use_keys(&res_config));
config = res_config; config = res_config;
@ -361,7 +361,7 @@ fn process_profile_items(
groups_item: ChainItem, groups_item: ChainItem,
merge_item: ChainItem, merge_item: ChainItem,
script_item: ChainItem, script_item: ChainItem,
profile_name: String, profile_name: &String,
) -> (Mapping, Vec<String>, HashMap<String, ResultLog>) { ) -> (Mapping, Vec<String>, HashMap<String, ResultLog>) {
if let ChainType::Rules(rules) = rules_item.data { if let ChainType::Rules(rules) = rules_item.data {
config = use_seq(rules, config.to_owned(), "rules"); config = use_seq(rules, config.to_owned(), "rules");
@ -377,12 +377,12 @@ fn process_profile_items(
if let ChainType::Merge(merge) = merge_item.data { if let ChainType::Merge(merge) = merge_item.data {
exists_keys.extend(use_keys(&merge)); exists_keys.extend(use_keys(&merge));
config = use_merge(merge, config.to_owned()); config = use_merge(&merge, config.to_owned());
} }
if let ChainType::Script(script) = script_item.data { if let ChainType::Script(script) = script_item.data {
let mut logs = vec![]; let mut logs = vec![];
match use_script(script, config.to_owned(), profile_name) { match use_script(script, &config, profile_name) {
Ok((res_config, res_logs)) => { Ok((res_config, res_logs)) => {
exists_keys.extend(use_keys(&res_config)); exists_keys.extend(use_keys(&res_config));
config = res_config; config = res_config;
@ -486,7 +486,7 @@ fn apply_builtin_scripts(
.for_each(|item| { .for_each(|item| {
logging!(debug, Type::Core, "run builtin script {}", item.uid); logging!(debug, Type::Core, "run builtin script {}", item.uid);
if let ChainType::Script(script) = item.data { if let ChainType::Script(script) = item.data {
match use_script(script, config.to_owned(), "".into()) { match use_script(script, &config, &String::from("")) {
Ok((res_config, _)) => { Ok((res_config, _)) => {
config = res_config; config = res_config;
} }
@ -646,7 +646,7 @@ pub async fn enhance() -> (Mapping, Vec<String>, HashMap<String, ResultLog>) {
// process globals // process globals
let (config, exists_keys, result_map) = let (config, exists_keys, result_map) =
process_global_items(config, global_merge, global_script, profile_name.clone()); process_global_items(config, global_merge, global_script, &profile_name);
// process profile-specific items // process profile-specific items
let (config, exists_keys, result_map) = process_profile_items( let (config, exists_keys, result_map) = process_profile_items(
@ -658,7 +658,7 @@ pub async fn enhance() -> (Mapping, Vec<String>, HashMap<String, ResultLog>) {
groups_item, groups_item,
merge_item, merge_item,
script_item, script_item,
profile_name, &profile_name,
); );
// merge default clash config // merge default clash config

View File

@ -5,8 +5,8 @@ use smartstring::alias::String;
pub fn use_script( pub fn use_script(
script: String, script: String,
config: Mapping, config: &Mapping,
name: String, name: &String,
) -> Result<(Mapping, Vec<(String, String)>)> { ) -> Result<(Mapping, Vec<(String, String)>)> {
use boa_engine::{Context, JsString, JsValue, Source, native_function::NativeFunction}; use boa_engine::{Context, JsString, JsValue, Source, native_function::NativeFunction};
use std::{cell::RefCell, rc::Rc}; use std::{cell::RefCell, rc::Rc};
@ -66,7 +66,7 @@ pub fn use_script(
let config_str = serde_json::to_string(&config)?; let config_str = serde_json::to_string(&config)?;
// 仅处理 name 参数中的特殊字符 // 仅处理 name 参数中的特殊字符
let safe_name = escape_js_string_for_single_quote(&name); let safe_name = escape_js_string_for_single_quote(name);
let code = format!( let code = format!(
r"try{{ r"try{{
@ -93,7 +93,7 @@ pub fn use_script(
let mut out = outputs.borrow_mut(); let mut out = outputs.borrow_mut();
match res { match res {
Ok(config) => Ok((use_lowercase(config), out.to_vec())), Ok(config) => Ok((use_lowercase(&config), out.to_vec())),
Err(err) => { Err(err) => {
out.push(("exception".into(), err.to_string().into())); out.push(("exception".into(), err.to_string().into()));
Ok((config, out.to_vec())) Ok((config, out.to_vec()))
@ -150,8 +150,8 @@ fn test_script() {
enable: false enable: false
"; ";
let config = serde_yaml_ng::from_str(config).expect("Failed to parse test config YAML"); let config = &serde_yaml_ng::from_str(config).expect("Failed to parse test config YAML");
let (config, results) = use_script(script.into(), config, "".into()) let (config, results) = use_script(script.into(), config, &String::from(""))
.expect("Script execution should succeed in test"); .expect("Script execution should succeed in test");
let _ = serde_yaml_ng::to_string(&config).expect("Failed to serialize config to YAML"); let _ = serde_yaml_ng::to_string(&config).expect("Failed to serialize config to YAML");