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

@ -105,8 +105,24 @@ pub trait Pcd<'a>: Serialize + Deserialize<'a> {
fn to_sorted_key_values(&self) -> Result<Map<String, Value>> { 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(); let mut sorted_key_values: Vec<(String, Value)> = map
sorted_key_values.sort_by_key(|(key, _)| key.to_owned()); .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()) Ok(sorted_key_values.into_iter().collect())
} }