From 0f41f1bc8d8049af89da5953b3ff5c7247f489f2 Mon Sep 17 00:00:00 2001 From: Tunglies <77394545+Tunglies@users.noreply.github.com> Date: Sun, 12 Apr 2026 11:13:17 +0800 Subject: [PATCH] refactor: optimize deep_merge function using iterative stack approach --- src-tauri/src/enhance/merge.rs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src-tauri/src/enhance/merge.rs b/src-tauri/src/enhance/merge.rs index aaa42d693..44fe46447 100644 --- a/src-tauri/src/enhance/merge.rs +++ b/src-tauri/src/enhance/merge.rs @@ -4,13 +4,20 @@ use super::use_lowercase; use serde_yaml_ng::{self, Mapping, Value}; fn deep_merge(a: &mut Value, b: Value) { - match (a, b) { - (&mut Value::Mapping(ref mut a), Value::Mapping(b)) => { - for (k, v) in b { - deep_merge(a.entry(k).or_insert(Value::Null), v); + let mut stack: Vec<(*mut Value, Value)> = vec![(a as *mut Value, b)]; + + while let Some((a_ptr, b)) = stack.pop() { + let a = unsafe { &mut *a_ptr }; + + match (a, b) { + (Value::Mapping(a_map), Value::Mapping(b_map)) => { + for (k, v) in b_map { + let child = a_map.entry(k).or_insert(Value::Null); + stack.push((child as *mut Value, v)); + } } + (a, b) => *a = b, } - (a, b) => *a = b, } }