Skip to content

Commit dc0ec59

Browse files
committed
remove unneccesary check, so it go ahead and sort item by item
1 parent 1b8d824 commit dc0ec59

File tree

1 file changed

+10
-32
lines changed

1 file changed

+10
-32
lines changed

src/serializers/fields.rs

+10-32
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)