@@ -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