mirror of
https://github.com/pchuan98/codex.git
synced 2026-07-01 00:31:56 +08:00
Rename `no_memories_if_mcp_or_web_search` → `disable_on_external_context` with backward compatibility While doing so, we add a key alias system on our layer merging system. What we try to avoid is a case where a company managed config use an old name while the user has a new name in it's local config (which would make the deserialization fail)
35 lines
1.2 KiB
Rust
35 lines
1.2 KiB
Rust
use crate::key_aliases::normalize_key_aliases;
|
|
use crate::key_aliases::normalized_with_key_aliases;
|
|
use toml::Value as TomlValue;
|
|
|
|
/// Merge config `overlay` into `base`, giving `overlay` precedence.
|
|
pub fn merge_toml_values(base: &mut TomlValue, overlay: &TomlValue) {
|
|
merge_toml_values_at_path(base, overlay, &mut Vec::new());
|
|
}
|
|
|
|
fn merge_toml_values_at_path(base: &mut TomlValue, overlay: &TomlValue, path: &mut Vec<String>) {
|
|
if let TomlValue::Table(overlay_table) = overlay
|
|
&& let TomlValue::Table(base_table) = base
|
|
{
|
|
normalize_key_aliases(path, base_table);
|
|
let mut overlay_table = overlay_table.clone();
|
|
normalize_key_aliases(path, &mut overlay_table);
|
|
|
|
for (key, value) in overlay_table {
|
|
path.push(key.clone());
|
|
if let Some(existing) = base_table.get_mut(&key) {
|
|
merge_toml_values_at_path(existing, &value, path);
|
|
} else {
|
|
base_table.insert(key, normalized_with_key_aliases(&value, path));
|
|
}
|
|
path.pop();
|
|
}
|
|
} else {
|
|
*base = normalized_with_key_aliases(overlay, path);
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
#[path = "merge_tests.rs"]
|
|
mod tests;
|