settings.rs

  1pub const SETTINGS_ROOT_KEY_VALUE_PATTERN: &str = r#"(document
  2    (object
  3        (pair
  4            key: (string (string_content) @name)
  5            value: (_)  @value
  6        )
  7    )
  8)"#;
  9
 10pub const SETTINGS_NESTED_KEY_VALUE_PATTERN: &str = r#"(document
 11    (object
 12        (pair
 13            key: (string (string_content) @parent_key)
 14            value: (object
 15                (pair
 16                    key: (string (string_content) @setting_name)
 17                    value: (_) @setting_value
 18                )
 19            )
 20        )
 21    )
 22)"#;
 23
 24pub const SETTINGS_LANGUAGES_PATTERN: &str = r#"(document
 25    (object
 26        (pair
 27            key: (string (string_content) @languages)
 28            value: (object
 29            (pair
 30                key: (string)
 31                value: (object
 32                    (pair
 33                        key: (string (string_content) @setting_name)
 34                        value: (_) @value
 35                    )
 36                )
 37            ))
 38        )
 39    )
 40    (#eq? @languages "languages")
 41)"#;
 42
 43pub const SETTINGS_ASSISTANT_TOOLS_PATTERN: &str = r#"(document
 44    (object
 45        (pair
 46            key: (string (string_content) @assistant)
 47            value: (object
 48                (pair
 49                    key: (string (string_content) @profiles)
 50                    value: (object
 51                        (pair
 52                            key: (_)
 53                            value: (object
 54                                (pair
 55                                    key: (string (string_content) @tools_key)
 56                                    value: (object
 57                                        (pair
 58                                            key: (string (string_content) @tool_name)
 59                                            value: (_) @tool_value
 60                                        )
 61                                    )
 62                                )
 63                            )
 64                        )
 65                    )
 66                )
 67            )
 68        )
 69    )
 70    (#eq? @assistant "assistant")
 71    (#eq? @profiles "profiles")
 72    (#eq? @tools_key "tools")
 73)"#;
 74
 75pub const SETTINGS_ASSISTANT_PATTERN: &str = r#"(document
 76    (object
 77        (pair
 78            key: (string (string_content) @key)
 79        )
 80    )
 81    (#eq? @key "assistant")
 82)"#;
 83
 84pub const SETTINGS_EDIT_PREDICTIONS_ASSISTANT_PATTERN: &str = r#"(document
 85    (object
 86        (pair
 87            key: (string (string_content) @edit_predictions)
 88            value: (object
 89                (pair key: (string (string_content) @enabled_in_assistant))
 90            )
 91        )
 92    )
 93    (#eq? @edit_predictions "edit_predictions")
 94    (#eq? @enabled_in_assistant "enabled_in_assistant")
 95)"#;
 96
 97pub const SETTINGS_DUPLICATED_AGENT_PATTERN: &str = r#"(document
 98    (object
 99        (pair
100            key: (string (string_content) @agent1)
101            value: (_)
102        ) @pair1
103        (pair
104            key: (string (string_content) @agent2)
105            value: (_)
106        )
107    )
108    (#eq? @agent1 "agent")
109    (#eq? @agent2 "agent")
110)"#;
111
112/// Migrate language settings,
113/// calls `migrate_fn` with the top level object as well as all language settings under the "languages" key
114/// Fails early if `migrate_fn` returns an error at any point
115pub fn migrate_language_setting(
116    value: &mut serde_json::Value,
117    migrate_fn: fn(&mut serde_json::Value, path: &[&str]) -> anyhow::Result<()>,
118) -> anyhow::Result<()> {
119    migrate_fn(value, &[])?;
120    let languages = value
121        .as_object_mut()
122        .and_then(|obj| obj.get_mut("languages"))
123        .and_then(|languages| languages.as_object_mut());
124    if let Some(languages) = languages {
125        for (language_name, language) in languages.iter_mut() {
126            let path = vec!["languages", language_name];
127            migrate_fn(language, &path)?;
128        }
129    }
130    Ok(())
131}