1use anyhow::Result;
2use serde_json::Value;
3
4use crate::migrations::migrate_language_setting;
5
6pub fn make_auto_indent_an_enum(value: &mut Value) -> Result<()> {
7 migrate_language_setting(value, migrate_auto_indent)
8}
9
10fn migrate_auto_indent(value: &mut Value, _path: &[&str]) -> Result<()> {
11 let Some(auto_indent) = value
12 .as_object_mut()
13 .and_then(|obj| obj.get_mut("auto_indent"))
14 else {
15 return Ok(());
16 };
17
18 *auto_indent = match auto_indent {
19 Value::Bool(true) => Value::String("syntax_aware".to_string()),
20 Value::Bool(false) => Value::String("none".to_string()),
21 Value::String(s) if s == "syntax_aware" || s == "preserve_indent" || s == "none" => {
22 return Ok(());
23 }
24 _ => anyhow::bail!("Expected auto_indent to be a boolean or valid enum value"),
25 };
26 Ok(())
27}