Skip to content

Commit 84d43f1

Browse files
committed
skip reusing wrap validators
1 parent 66c8c58 commit 84d43f1

File tree

3 files changed

+12
-8
lines changed

3 files changed

+12
-8
lines changed

src/common/prebuilt.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ pub fn get_prebuilt<T>(
88
type_: &str,
99
schema: &Bound<'_, PyDict>,
1010
prebuilt_attr_name: &str,
11-
extractor: impl FnOnce(Bound<'_, PyAny>) -> PyResult<T>,
11+
extractor: impl FnOnce(Bound<'_, PyAny>) -> PyResult<Option<T>>,
1212
) -> PyResult<Option<T>> {
1313
let py = schema.py();
1414

@@ -40,5 +40,5 @@ pub fn get_prebuilt<T>(
4040

4141
// Retrieve the prebuilt validator / serializer if available
4242
let prebuilt: Bound<'_, PyAny> = class_dict.get_item(prebuilt_attr_name)?;
43-
extractor(prebuilt).map(Some)
43+
extractor(prebuilt)
4444
}

src/serializers/prebuilt.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@ pub struct PrebuiltSerializer {
1717
impl PrebuiltSerializer {
1818
pub fn try_get_from_schema(type_: &str, schema: &Bound<'_, PyDict>) -> PyResult<Option<CombinedSerializer>> {
1919
get_prebuilt(type_, schema, "__pydantic_serializer__", |py_any| {
20-
py_any
21-
.extract::<Py<SchemaSerializer>>()
22-
.map(|schema_serializer| Self { schema_serializer }.into())
20+
let schema_serializer = py_any.extract::<Py<SchemaSerializer>>()?;
21+
if matches!(schema_serializer.get().serializer, CombinedSerializer::FunctionWrap(_)) {
22+
return Ok(None);
23+
}
24+
Ok(Some(Self { schema_serializer }.into()))
2325
})
2426
}
2527
}

src/validators/prebuilt.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@ pub struct PrebuiltValidator {
1616
impl PrebuiltValidator {
1717
pub fn try_get_from_schema(type_: &str, schema: &Bound<'_, PyDict>) -> PyResult<Option<CombinedValidator>> {
1818
get_prebuilt(type_, schema, "__pydantic_validator__", |py_any| {
19-
py_any
20-
.extract::<Py<SchemaValidator>>()
21-
.map(|schema_validator| Self { schema_validator }.into())
19+
let schema_validator = py_any.extract::<Py<SchemaValidator>>()?;
20+
if matches!(schema_validator.get().validator, CombinedValidator::FunctionWrap(_)) {
21+
return Ok(None);
22+
}
23+
Ok(Some(Self { schema_validator }.into()))
2224
})
2325
}
2426
}

0 commit comments

Comments
 (0)