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}