settings.rs

 1use anyhow::Result;
 2use serde_json::Value;
 3
 4use crate::migrations::migrate_settings;
 5
 6pub fn migrate_experimental_sweep_mercury(value: &mut Value) -> Result<()> {
 7    migrate_settings(value, &mut |obj| {
 8        migrate_one(obj);
 9        Ok(())
10    })
11}
12
13fn migrate_one(obj: &mut serde_json::Map<String, Value>) {
14    if let Some(edit_predictions) = obj.get_mut("edit_predictions") {
15        if let Some(edit_predictions_obj) = edit_predictions.as_object_mut() {
16            migrate_provider_field(edit_predictions_obj, "provider");
17        }
18    }
19
20    if let Some(features) = obj.get_mut("features") {
21        if let Some(features_obj) = features.as_object_mut() {
22            migrate_provider_field(features_obj, "edit_prediction_provider");
23        }
24    }
25}
26
27fn migrate_provider_field(obj: &mut serde_json::Map<String, Value>, field_name: &str) {
28    let Some(provider) = obj.get(field_name) else {
29        return;
30    };
31
32    let Some(provider_obj) = provider.as_object() else {
33        return;
34    };
35
36    let Some(experimental_name) = provider_obj.get("experimental") else {
37        return;
38    };
39
40    let Some(name) = experimental_name.as_str() else {
41        return;
42    };
43
44    if name == "sweep" || name == "mercury" {
45        obj.insert(field_name.to_string(), Value::String(name.to_string()));
46    }
47}