Fix pcd to_sorted_key_values to sort recursively

This commit is contained in:
Sosthene 2024-12-17 22:34:58 +01:00 committed by Nicolas Cantu
parent 433326f3f6
commit eda4b18770

View File

@ -103,10 +103,26 @@ pub trait Pcd<'a>: Serialize + Deserialize<'a> {
}
fn to_sorted_key_values(&self) -> Result<Map<String, Value>> {
let map = self.to_value_object()?;
let map = self.to_value_object()?;
let mut sorted_key_values: Vec<(String, Value)> = map.into_iter().map(|(key, value)| (key, value)).collect();
sorted_key_values.sort_by_key(|(key, _)| key.to_owned());
let mut sorted_key_values: Vec<(String, Value)> = map
.into_iter()
.map(|(key, value)| {
let sorted_value = match value {
Value::Object(obj) => {
// Recursively sort nested objects
let mut sorted_nested: Vec<(String, Value)> = obj.into_iter().collect();
sorted_nested.sort_by_key(|(k, _)| k.clone());
Value::Object(sorted_nested.into_iter().collect())
}
_ => value, // Keep other values unchanged
};
(key, sorted_value)
})
.collect();
// Sort top-level keys
sorted_key_values.sort_by_key(|(key, _)| key.clone());
Ok(sorted_key_values.into_iter().collect())
}