@@ -208,44 +208,22 @@ impl GeneralFieldsSerializer {
208208 }
209209 }
210210
211- fn contains_dict ( value : & Bound < ' _ , PyAny > ) -> bool {
212- if value. downcast :: < PyDict > ( ) . is_ok ( ) {
213- return true ;
214- }
215- if let Ok ( list) = value. downcast :: < PyList > ( ) {
216- for item in list. iter ( ) {
217- if Self :: contains_dict ( & item) {
218- return true ;
219- }
220- }
221- }
222- false
223- }
224-
225211 fn sort_dict_recursive < ' py > ( py : Python < ' py > , value : & Bound < ' py , PyAny > ) -> PyResult < Bound < ' py , PyAny > > {
226212 if let Ok ( dict) = value. downcast :: < PyDict > ( ) {
227213 let mut items: Vec < ( Bound < ' py , PyAny > , Bound < ' py , PyAny > ) > = dict. iter ( ) . collect ( ) ;
228214 items. sort_by_cached_key ( |( key, _) | key. to_string ( ) ) ;
229215
230216 let sorted_dict = PyDict :: new ( py) ;
231217 for ( k, v) in items {
232- if Self :: contains_dict ( & v) {
233- let sorted_v = Self :: sort_dict_recursive ( py, & v) ?;
234- sorted_dict. set_item ( k, sorted_v) ?;
235- } else {
236- sorted_dict. set_item ( k, v) ?;
237- }
218+ let sorted_v = Self :: sort_dict_recursive ( py, & v) ?;
219+ sorted_dict. set_item ( k, sorted_v) ?;
238220 }
239221 Ok ( sorted_dict. into_any ( ) )
240222 } else if let Ok ( list) = value. downcast :: < PyList > ( ) {
241223 let sorted_list = PyList :: empty ( py) ;
242224 for item in list. iter ( ) {
243- if Self :: contains_dict ( & item) {
244- let sorted_item = Self :: sort_dict_recursive ( py, & item) ?;
245- sorted_list. append ( sorted_item) ?;
246- } else {
247- sorted_list. append ( item) ?;
248- }
225+ let sorted_item = Self :: sort_dict_recursive ( py, & item) ?;
226+ sorted_list. append ( sorted_item) ?;
249227 }
250228 Ok ( sorted_list. into_any ( ) )
251229 } else {
@@ -288,7 +266,7 @@ impl GeneralFieldsSerializer {
288266 if let Some ( field) = op_field {
289267 if let Some ( ref serializer) = field. serializer {
290268 if !exclude_default ( value, & field_extra, serializer) ? {
291- let processed_value = if extra. sort_keys && Self :: contains_dict ( value ) {
269+ let processed_value = if extra. sort_keys {
292270 let sorted_dict = Self :: sort_dict_recursive ( value. py ( ) , value) ?;
293271 serializer. to_python (
294272 sorted_dict. as_ref ( ) ,
@@ -310,7 +288,7 @@ impl GeneralFieldsSerializer {
310288 }
311289 return Ok ( Some ( false ) ) ;
312290 } else if self . mode == FieldsMode :: TypedDictAllow {
313- let processed_value = if extra. sort_keys && Self :: contains_dict ( value ) {
291+ let processed_value = if extra. sort_keys {
314292 let sorted_dict = Self :: sort_dict_recursive ( value. py ( ) , value) ?;
315293 match & self . extra_serializer {
316294 Some ( serializer) => serializer. to_python (
@@ -408,7 +386,7 @@ impl GeneralFieldsSerializer {
408386 if let Some ( field) = self . fields . get ( key_str) {
409387 if let Some ( ref serializer) = field. serializer {
410388 if !exclude_default ( value, & field_extra, serializer) . map_err ( py_err_se_err) ? {
411- if extra. sort_keys && Self :: contains_dict ( value ) {
389+ if extra. sort_keys {
412390 let sorted_dict = Self :: sort_dict_recursive ( value. py ( ) , value) . map_err ( py_err_se_err) ?;
413391 let s = PydanticSerializer :: new (
414392 sorted_dict. as_ref ( ) ,
@@ -434,7 +412,7 @@ impl GeneralFieldsSerializer {
434412 }
435413 } else if self . mode == FieldsMode :: TypedDictAllow {
436414 let output_key = infer_json_key ( key, & field_extra) . map_err ( py_err_se_err) ?;
437- if extra. sort_keys && Self :: contains_dict ( value ) {
415+ if extra. sort_keys {
438416 let sorted_dict = Self :: sort_dict_recursive ( value. py ( ) , value) . map_err ( py_err_se_err) ?;
439417 let s = SerializeInfer :: new (
440418 sorted_dict. as_ref ( ) ,
@@ -541,7 +519,7 @@ impl TypeSerializer for GeneralFieldsSerializer {
541519 continue ;
542520 }
543521 if let Some ( ( next_include, next_exclude) ) = self . filter . key_filter ( & key, include, exclude) ? {
544- let processed_value = if extra. sort_keys && Self :: contains_dict ( & value ) {
522+ let processed_value = if extra. sort_keys {
545523 let sorted_dict = Self :: sort_dict_recursive ( value. py ( ) , & value) ?;
546524 match & self . extra_serializer {
547525 Some ( serializer) => serializer. to_python (
@@ -636,7 +614,7 @@ impl TypeSerializer for GeneralFieldsSerializer {
636614 let filter = self . filter . key_filter ( & key, include, exclude) . map_err ( py_err_se_err) ?;
637615 if let Some ( ( next_include, next_exclude) ) = filter {
638616 let output_key = infer_json_key ( & key, extra) . map_err ( py_err_se_err) ?;
639- if extra. sort_keys && Self :: contains_dict ( & value ) {
617+ if extra. sort_keys {
640618 let sorted_dict = Self :: sort_dict_recursive ( value. py ( ) , & value) . map_err ( py_err_se_err) ?;
641619 let s = SerializeInfer :: new (
642620 sorted_dict. as_ref ( ) ,
0 commit comments