@@ -208,44 +208,22 @@ impl GeneralFieldsSerializer {
208
208
}
209
209
}
210
210
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
-
225
211
fn sort_dict_recursive < ' py > ( py : Python < ' py > , value : & Bound < ' py , PyAny > ) -> PyResult < Bound < ' py , PyAny > > {
226
212
if let Ok ( dict) = value. downcast :: < PyDict > ( ) {
227
213
let mut items: Vec < ( Bound < ' py , PyAny > , Bound < ' py , PyAny > ) > = dict. iter ( ) . collect ( ) ;
228
214
items. sort_by_cached_key ( |( key, _) | key. to_string ( ) ) ;
229
215
230
216
let sorted_dict = PyDict :: new ( py) ;
231
217
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) ?;
238
220
}
239
221
Ok ( sorted_dict. into_any ( ) )
240
222
} else if let Ok ( list) = value. downcast :: < PyList > ( ) {
241
223
let sorted_list = PyList :: empty ( py) ;
242
224
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) ?;
249
227
}
250
228
Ok ( sorted_list. into_any ( ) )
251
229
} else {
@@ -288,7 +266,7 @@ impl GeneralFieldsSerializer {
288
266
if let Some ( field) = op_field {
289
267
if let Some ( ref serializer) = field. serializer {
290
268
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 {
292
270
let sorted_dict = Self :: sort_dict_recursive ( value. py ( ) , value) ?;
293
271
serializer. to_python (
294
272
sorted_dict. as_ref ( ) ,
@@ -310,7 +288,7 @@ impl GeneralFieldsSerializer {
310
288
}
311
289
return Ok ( Some ( false ) ) ;
312
290
} 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 {
314
292
let sorted_dict = Self :: sort_dict_recursive ( value. py ( ) , value) ?;
315
293
match & self . extra_serializer {
316
294
Some ( serializer) => serializer. to_python (
@@ -408,7 +386,7 @@ impl GeneralFieldsSerializer {
408
386
if let Some ( field) = self . fields . get ( key_str) {
409
387
if let Some ( ref serializer) = field. serializer {
410
388
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 {
412
390
let sorted_dict = Self :: sort_dict_recursive ( value. py ( ) , value) . map_err ( py_err_se_err) ?;
413
391
let s = PydanticSerializer :: new (
414
392
sorted_dict. as_ref ( ) ,
@@ -434,7 +412,7 @@ impl GeneralFieldsSerializer {
434
412
}
435
413
} else if self . mode == FieldsMode :: TypedDictAllow {
436
414
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 {
438
416
let sorted_dict = Self :: sort_dict_recursive ( value. py ( ) , value) . map_err ( py_err_se_err) ?;
439
417
let s = SerializeInfer :: new (
440
418
sorted_dict. as_ref ( ) ,
@@ -541,7 +519,7 @@ impl TypeSerializer for GeneralFieldsSerializer {
541
519
continue ;
542
520
}
543
521
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 {
545
523
let sorted_dict = Self :: sort_dict_recursive ( value. py ( ) , & value) ?;
546
524
match & self . extra_serializer {
547
525
Some ( serializer) => serializer. to_python (
@@ -636,7 +614,7 @@ impl TypeSerializer for GeneralFieldsSerializer {
636
614
let filter = self . filter . key_filter ( & key, include, exclude) . map_err ( py_err_se_err) ?;
637
615
if let Some ( ( next_include, next_exclude) ) = filter {
638
616
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 {
640
618
let sorted_dict = Self :: sort_dict_recursive ( value. py ( ) , & value) . map_err ( py_err_se_err) ?;
641
619
let s = SerializeInfer :: new (
642
620
sorted_dict. as_ref ( ) ,
0 commit comments