|
1 | 1 | use pyo3::intern;
|
2 | 2 | use pyo3::prelude::*;
|
3 | 3 | use pyo3::types::{PyDict, PyList, PyTuple};
|
| 4 | +use smallvec::SmallVec; |
4 | 5 | use std::borrow::Cow;
|
5 | 6 |
|
6 | 7 | use crate::build_tools::py_schema_err;
|
@@ -78,7 +79,7 @@ impl TypeSerializer for UnionSerializer {
|
78 | 79 | // try the serializers in left to right order with error_on fallback=true
|
79 | 80 | let mut new_extra = extra.clone();
|
80 | 81 | new_extra.check = SerCheck::Strict;
|
81 |
| - let mut errors: Vec<PyErr> = Vec::new(); |
| 82 | + let mut errors: SmallVec<[PyErr; 16]> = SmallVec::new(); |
82 | 83 |
|
83 | 84 | for comb_serializer in &self.choices {
|
84 | 85 | match comb_serializer.to_python(value, include, exclude, &new_extra) {
|
@@ -113,7 +114,7 @@ impl TypeSerializer for UnionSerializer {
|
113 | 114 | fn json_key<'a>(&self, key: &'a Bound<'_, PyAny>, extra: &Extra) -> PyResult<Cow<'a, str>> {
|
114 | 115 | let mut new_extra = extra.clone();
|
115 | 116 | new_extra.check = SerCheck::Strict;
|
116 |
| - let mut errors: Vec<PyErr> = Vec::new(); |
| 117 | + let mut errors: SmallVec<[PyErr; 16]> = SmallVec::new(); |
117 | 118 |
|
118 | 119 | for comb_serializer in &self.choices {
|
119 | 120 | match comb_serializer.json_key(key, &new_extra) {
|
@@ -156,7 +157,7 @@ impl TypeSerializer for UnionSerializer {
|
156 | 157 | let py = value.py();
|
157 | 158 | let mut new_extra = extra.clone();
|
158 | 159 | new_extra.check = SerCheck::Strict;
|
159 |
| - let mut errors: Vec<PyErr> = Vec::new(); |
| 160 | + let mut errors: SmallVec<[PyErr; 16]> = SmallVec::new(); |
160 | 161 |
|
161 | 162 | for comb_serializer in &self.choices {
|
162 | 163 | match comb_serializer.to_python(value, include, exclude, &new_extra) {
|
|
0 commit comments