use anyhow::Result;
pub fn compare_task_fields(before: &str, after: &str) -> Result<Vec<String>> {
let before_value: serde_json::Value = serde_json::from_str(before)?;
let after_value: serde_json::Value = serde_json::from_str(after)?;
if let (Some(before_obj), Some(after_obj)) = (before_value.as_object(), after_value.as_object())
{
let mut changed = Vec::new();
for (key, after_val) in after_obj {
if let Some(before_val) = before_obj.get(key) {
if before_val != after_val {
changed.push(key.clone());
}
} else {
changed.push(key.clone());
}
}
Ok(changed)
} else {
Ok(vec!["task".to_string()])
}
}