Skip to content

Commit 98fe512

Browse files
committed
don't fail on custom ser, but add info to warnings
1 parent 863640b commit 98fe512

File tree

1 file changed

+10
-20
lines changed
  • src/serializers/type_serializers

1 file changed

+10
-20
lines changed

src/serializers/type_serializers/union.rs

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ use crate::tools::SchemaDict;
99
use crate::PydanticSerializationUnexpectedValue;
1010

1111
use super::{
12-
infer_json_key, infer_serialize, infer_to_python, py_err_se_err, BuildSerializer, CombinedSerializer, Extra,
13-
SerCheck, TypeSerializer,
12+
infer_json_key, infer_serialize, infer_to_python, BuildSerializer, CombinedSerializer, Extra, SerCheck,
13+
TypeSerializer,
1414
};
1515

1616
#[derive(Debug, Clone)]
@@ -84,7 +84,7 @@ impl TypeSerializer for UnionSerializer {
8484
Ok(v) => return Ok(v),
8585
Err(err) => match err.is_instance_of::<PydanticSerializationUnexpectedValue>(value.py()) {
8686
true => (),
87-
false => return Err(err),
87+
false => extra.warnings.custom_warning(err.to_string()),
8888
},
8989
}
9090
}
@@ -95,14 +95,15 @@ impl TypeSerializer for UnionSerializer {
9595
Ok(v) => return Ok(v),
9696
Err(err) => match err.is_instance_of::<PydanticSerializationUnexpectedValue>(value.py()) {
9797
true => (),
98-
false => return Err(err),
98+
false => extra.warnings.custom_warning(err.to_string()),
9999
},
100100
}
101101
}
102102
}
103103

104104
extra.warnings.on_fallback_py(self.get_name(), value, extra)?;
105105
infer_to_python(value, include, exclude, extra)
106+
// Need to push all other errors if serialization didn't succeed
106107
}
107108

108109
fn json_key<'a>(&self, key: &'a Bound<'_, PyAny>, extra: &Extra) -> PyResult<Cow<'a, str>> {
@@ -111,21 +112,15 @@ impl TypeSerializer for UnionSerializer {
111112
for comb_serializer in &self.choices {
112113
match comb_serializer.json_key(key, &new_extra) {
113114
Ok(v) => return Ok(v),
114-
Err(err) => match err.is_instance_of::<PydanticSerializationUnexpectedValue>(key.py()) {
115-
true => (),
116-
false => return Err(err),
117-
},
115+
Err(err) => extra.warnings.custom_warning(err.to_string()),
118116
}
119117
}
120118
if self.retry_with_lax_check() {
121119
new_extra.check = SerCheck::Lax;
122120
for comb_serializer in &self.choices {
123121
match comb_serializer.json_key(key, &new_extra) {
124122
Ok(v) => return Ok(v),
125-
Err(err) => match err.is_instance_of::<PydanticSerializationUnexpectedValue>(key.py()) {
126-
true => (),
127-
false => return Err(err),
128-
},
123+
Err(err) => extra.warnings.custom_warning(err.to_string()),
129124
}
130125
}
131126
}
@@ -145,24 +140,19 @@ impl TypeSerializer for UnionSerializer {
145140
let py = value.py();
146141
let mut new_extra = extra.clone();
147142
new_extra.check = SerCheck::Strict;
143+
148144
for comb_serializer in &self.choices {
149145
match comb_serializer.to_python(value, include, exclude, &new_extra) {
150146
Ok(v) => return infer_serialize(v.bind(py), serializer, None, None, extra),
151-
Err(err) => match err.is_instance_of::<PydanticSerializationUnexpectedValue>(py) {
152-
true => (),
153-
false => return Err(py_err_se_err(err)),
154-
},
147+
Err(err) => extra.warnings.custom_warning(err.to_string()),
155148
}
156149
}
157150
if self.retry_with_lax_check() {
158151
new_extra.check = SerCheck::Lax;
159152
for comb_serializer in &self.choices {
160153
match comb_serializer.to_python(value, include, exclude, &new_extra) {
161154
Ok(v) => return infer_serialize(v.bind(py), serializer, None, None, extra),
162-
Err(err) => match err.is_instance_of::<PydanticSerializationUnexpectedValue>(py) {
163-
true => (),
164-
false => return Err(py_err_se_err(err)),
165-
},
155+
Err(err) => extra.warnings.custom_warning(err.to_string()),
166156
}
167157
}
168158
}

0 commit comments

Comments
 (0)