131 lines · 3.8 KB · Rust
RawDownload
pub const SETTINGS_ROOT_KEY_VALUE_PATTERN: &str = r#"(document    (object        (pair            key: (string (string_content) @name)            value: (_)  @value        )    ))"#; pub const SETTINGS_NESTED_KEY_VALUE_PATTERN: &str = r#"(document    (object        (pair            key: (string (string_content) @parent_key)            value: (object                (pair                    key: (string (string_content) @setting_name)                    value: (_) @setting_value                )            )        )    ))"#; pub const SETTINGS_LANGUAGES_PATTERN: &str = r#"(document    (object        (pair            key: (string (string_content) @languages)            value: (object            (pair                key: (string)                value: (object                    (pair                        key: (string (string_content) @setting_name)                        value: (_) @value                    )                )            ))        )    )    (#eq? @languages "languages"))"#; pub const SETTINGS_ASSISTANT_TOOLS_PATTERN: &str = r#"(document    (object        (pair            key: (string (string_content) @assistant)            value: (object                (pair                    key: (string (string_content) @profiles)                    value: (object                        (pair                            key: (_)                            value: (object                                (pair                                    key: (string (string_content) @tools_key)                                    value: (object                                        (pair                                            key: (string (string_content) @tool_name)                                            value: (_) @tool_value                                        )                                    )                                )                            )                        )                    )                )            )        )    )    (#eq? @assistant "assistant")    (#eq? @profiles "profiles")    (#eq? @tools_key "tools"))"#; pub const SETTINGS_ASSISTANT_PATTERN: &str = r#"(document    (object        (pair            key: (string (string_content) @key)        )    )    (#eq? @key "assistant"))"#; pub const SETTINGS_EDIT_PREDICTIONS_ASSISTANT_PATTERN: &str = r#"(document    (object        (pair            key: (string (string_content) @edit_predictions)            value: (object                (pair key: (string (string_content) @enabled_in_assistant))            )        )    )    (#eq? @edit_predictions "edit_predictions")    (#eq? @enabled_in_assistant "enabled_in_assistant"))"#; pub const SETTINGS_DUPLICATED_AGENT_PATTERN: &str = r#"(document    (object        (pair            key: (string (string_content) @agent1)            value: (_)        ) @pair1        (pair            key: (string (string_content) @agent2)            value: (_)        )    )    (#eq? @agent1 "agent")    (#eq? @agent2 "agent"))"#; /// Migrate language settings,/// calls `migrate_fn` with the top level object as well as all language settings under the "languages" key/// Fails early if `migrate_fn` returns an error at any pointpub fn migrate_language_setting(    value: &mut serde_json::Value,    migrate_fn: fn(&mut serde_json::Value, path: &[&str]) -> anyhow::Result<()>,) -> anyhow::Result<()> {    migrate_fn(value, &[])?;    let languages = value        .as_object_mut()        .and_then(|obj| obj.get_mut("languages"))        .and_then(|languages| languages.as_object_mut());    if let Some(languages) = languages {        for (language_name, language) in languages.iter_mut() {            let path = vec!["languages", language_name];            migrate_fn(language, &path)?;        }    }    Ok(())}