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