Deep-merge `extra` into `root`: objects merge recursively, arrays union by value (no duplicates), scalars overwrite. Used for non-hook settings such as Claude's `permissions.deny` rule.
(root: &mut Map<String, Value>, extra: &Map<String, Value>)
| 353 | /// value (no duplicates), scalars overwrite. Used for non-hook settings such |
| 354 | /// as Claude's `permissions.deny` rule. |
| 355 | fn deep_merge(root: &mut Map<String, Value>, extra: &Map<String, Value>) { |
| 356 | for (key, value) in extra { |
| 357 | match root.get_mut(key) { |
| 358 | Some(existing) => merge_value(existing, value), |
| 359 | None => { |
| 360 | root.insert(key.clone(), value.clone()); |
| 361 | } |
| 362 | } |
| 363 | } |
| 364 | } |
| 365 | |
| 366 | fn merge_value(target: &mut Value, source: &Value) { |
| 367 | match (target, source) { |
no test coverage detected