Codex Handbook
config/src/key_aliases.rs 52 lines
use toml::Value as TomlValue;use toml::map::Map as TomlMap;#[derive(Debug, Clone, Copy)]struct ConfigKeyAlias {    table_path: &'static [&'static str],    legacy_key: &'static str,    canonical_key: &'static str,}const CONFIG_KEY_ALIASES: &[ConfigKeyAlias] = &[ConfigKeyAlias {    table_path: &["memories"],    legacy_key: "no_memories_if_mcp_or_web_search",    canonical_key: "disable_on_external_context",}];pub(crate) fn normalize_key_aliases(path: &[String], table: &mut TomlMap<String, TomlValue>) {    for alias in CONFIG_KEY_ALIASES {        if path            .iter()            .map(String::as_str)            .eq(alias.table_path.iter().copied())            && let Some(value) = table.remove(alias.legacy_key)        {            table                .entry(alias.canonical_key.to_string())                .or_insert(value);        }    }}pub(crate) fn normalized_with_key_aliases(value: &TomlValue, path: &[String]) -> TomlValue {    match value {        TomlValue::Table(table) => {            let mut normalized = TomlMap::new();            for (key, child) in table {                let mut child_path = path.to_vec();                child_path.push(key.clone());                normalized.insert(key.clone(), normalized_with_key_aliases(child, &child_path));            }            normalize_key_aliases(path, &mut normalized);            TomlValue::Table(normalized)        }        TomlValue::Array(items) => TomlValue::Array(            items                .iter()                .map(|item| normalized_with_key_aliases(item, path))                .collect(),        ),        _ => value.clone(),    }}