From eda4b187709d731a356e9db33239125863fdc6ca Mon Sep 17 00:00:00 2001 From: Sosthene Date: Tue, 17 Dec 2024 22:34:58 +0100 Subject: [PATCH] Fix pcd to_sorted_key_values to sort recursively --- src/pcd.rs | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/pcd.rs b/src/pcd.rs index 6bc26db..b6cbef0 100644 --- a/src/pcd.rs +++ b/src/pcd.rs @@ -103,10 +103,26 @@ pub trait Pcd<'a>: Serialize + Deserialize<'a> { } fn to_sorted_key_values(&self) -> Result> { - 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()) }