Skip to content

Commit ad8a8eb

Browse files
committed
function-after: use input to function as source in error message
1 parent 1cefeae commit ad8a8eb

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

src/validators/function.rs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -162,19 +162,19 @@ impl_build!(FunctionAfterValidator, "function-after");
162162
impl FunctionAfterValidator {
163163
fn _validate<'py, I: Input<'py> + ?Sized>(
164164
&self,
165-
call: impl FnOnce(&I, &mut ValidationState<'_, 'py>) -> ValResult<PyObject>,
165+
call: impl FnOnce(&I, &mut ValidationState<'_, 'py>) -> ValResult<Bound<'py, PyAny>>,
166166
py: Python<'py>,
167167
input: &I,
168168
state: &mut ValidationState<'_, 'py>,
169169
) -> ValResult<PyObject> {
170170
let v = call(input, state)?;
171171
let r = if self.info_arg {
172172
let info = ValidationInfo::new(py, state.extra(), &self.config, self.field_name.clone());
173-
self.func.call1(py, (v.to_object(py), info))
173+
self.func.call1(py, (v.clone(), info))
174174
} else {
175-
self.func.call1(py, (v.to_object(py),))
175+
self.func.call1(py, (v.clone(),))
176176
};
177-
r.map_err(|e| convert_err(py, e, input))
177+
r.map_err(|e| convert_err(py, e, v))
178178
}
179179
}
180180

@@ -191,7 +191,9 @@ impl Validator for FunctionAfterValidator {
191191
input: &(impl Input<'py> + ?Sized),
192192
state: &mut ValidationState<'_, 'py>,
193193
) -> ValResult<PyObject> {
194-
let validate = |v: &_, s: &mut ValidationState<'_, 'py>| self.validator.validate(py, v, s);
194+
let validate = |v: &_, s: &mut ValidationState<'_, 'py>| {
195+
self.validator.validate(py, v, s).map(|object| object.into_bound(py))
196+
};
195197
self._validate(validate, py, input, state)
196198
}
197199
fn validate_assignment<'py>(
@@ -203,7 +205,9 @@ impl Validator for FunctionAfterValidator {
203205
state: &mut ValidationState<'_, 'py>,
204206
) -> ValResult<PyObject> {
205207
let validate = move |v: &Bound<'py, PyAny>, s: &mut ValidationState<'_, 'py>| {
206-
self.validator.validate_assignment(py, v, field_name, field_value, s)
208+
self.validator
209+
.validate_assignment(py, v, field_name, field_value, s)
210+
.map(|object| object.into_bound(py))
207211
};
208212
self._validate(validate, py, obj, state)
209213
}

0 commit comments

Comments
 (0)