Skip to content

Commit a89eddf

Browse files
committed
model and typedict support
1 parent 4c899ed commit a89eddf

File tree

5 files changed

+25
-26
lines changed

5 files changed

+25
-26
lines changed

src/errors/line_error.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@ impl<'a> ValError<'a> {
6262
}
6363

6464
/// a bit like clone but change the lifetime to match py
65-
pub fn duplicate(self, py: Python<'_>) -> ValError<'_> {
65+
pub fn into_owned(self, py: Python<'_>) -> ValError<'_> {
6666
match self {
67-
ValError::LineErrors(errors) => errors.into_iter().map(|e| e.duplicate(py)).collect::<Vec<_>>().into(),
67+
ValError::LineErrors(errors) => errors.into_iter().map(|e| e.into_owned(py)).collect::<Vec<_>>().into(),
6868
ValError::InternalErr(err) => ValError::InternalErr(err.clone_ref(py)),
6969
ValError::Omit => ValError::Omit,
7070
ValError::UseDefault => ValError::UseDefault,
@@ -129,8 +129,7 @@ impl<'a> ValLineError<'a> {
129129
self
130130
}
131131

132-
/// a bit like clone but change the lifetime to match py, used by ValError.duplicate above
133-
pub fn duplicate<'py>(self, py: Python<'py>) -> ValLineError<'py> {
132+
pub fn into_owned<'py>(self, py: Python<'py>) -> ValLineError<'py> {
134133
ValLineError {
135134
error_type: self.error_type,
136135
input_value: InputValue::<'py>::from(self.input_value.to_object(py)),

src/validators/dict.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ impl Validator for DictValidator {
123123
/// for some lifetime 'a.
124124
///
125125
/// This lifetime `'a` is shorter than the original lifetime `'data` of the input,
126-
/// which is only a problem in error branches. To resolve we have to call `duplicate`
126+
/// which is only a problem in error branches. To resolve we have to call `into_owned`
127127
/// to extend out the lifetime to match the original input.
128128
pub trait BorrowInput {
129129
type Input<'a>: Input<'a>
@@ -192,24 +192,24 @@ impl DictValidator {
192192
errors.push(
193193
err.with_outer_location("[key]".into())
194194
.with_outer_location(key.as_loc_item())
195-
.duplicate(py),
195+
.into_owned(py),
196196
);
197197
}
198198
None
199199
}
200200
Err(ValError::Omit) => continue,
201-
Err(err) => return Err(err.duplicate(py)),
201+
Err(err) => return Err(err.into_owned(py)),
202202
};
203203
let output_value = match value_validator.validate(py, value, state) {
204204
Ok(value) => Some(value),
205205
Err(ValError::LineErrors(line_errors)) => {
206206
for err in line_errors {
207-
errors.push(err.with_outer_location(key.as_loc_item()).duplicate(py));
207+
errors.push(err.with_outer_location(key.as_loc_item()).into_owned(py));
208208
}
209209
None
210210
}
211211
Err(ValError::Omit) => continue,
212-
Err(err) => return Err(err.duplicate(py)),
212+
Err(err) => return Err(err.into_owned(py)),
213213
};
214214
if let (Some(key), Some(value)) = (output_key, output_value) {
215215
output.set_item(key, value)?;

src/validators/json.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ impl Validator for JsonValidator {
5555
match self.validator {
5656
Some(ref validator) => match validator.validate(py, &json_value, state) {
5757
Ok(v) => Ok(v),
58-
Err(err) => Err(err.duplicate(py)),
58+
Err(err) => Err(err.into_owned(py)),
5959
},
6060
None => Ok(json_value.to_object(py)),
6161
}

src/validators/model_fields.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -205,11 +205,11 @@ impl Validator for ModelFieldsValidator {
205205
for err in line_errors {
206206
errors.push(
207207
lookup_path.apply_error_loc(err, self.loc_by_alias, &field.name)
208-
.duplicate(py)
208+
.into_owned(py)
209209
);
210210
}
211211
}
212-
Err(err) => return ControlFlow::Break(err.duplicate(py)),
212+
Err(err) => return ControlFlow::Break(err.into_owned(py)),
213213
}
214214
continue;
215215
} else if let Some(value) = control_flow!(field.validator.default_value(py, Some(field.name.as_str()), state))? {
@@ -240,14 +240,14 @@ impl Validator for ModelFieldsValidator {
240240
errors.push(
241241
err.with_outer_location(raw_key.as_loc_item())
242242
.with_type(ErrorTypeDefaults::InvalidKey)
243-
.duplicate(py)
243+
.into_owned(py)
244244
);
245245
}
246246
continue;
247247
}
248-
Err(err) => return Err(err.duplicate(py)),
248+
Err(err) => return Err(err.into_owned(py)),
249249
};
250-
let cow = either_str.as_cow().map_err(|err| err.duplicate(py))?;
250+
let cow = either_str.as_cow().map_err(|err| err.into_owned(py))?;
251251
if used_keys.contains(cow.as_ref()) {
252252
continue;
253253
}
@@ -262,7 +262,7 @@ impl Validator for ModelFieldsValidator {
262262
value,
263263
raw_key.as_loc_item(),
264264
)
265-
.duplicate(py)
265+
.into_owned(py)
266266
);
267267
}
268268
ExtraBehavior::Ignore => {}
@@ -276,10 +276,10 @@ impl Validator for ModelFieldsValidator {
276276
}
277277
Err(ValError::LineErrors(line_errors)) => {
278278
for err in line_errors {
279-
errors.push(err.with_outer_location(raw_key.as_loc_item()).duplicate(py));
279+
errors.push(err.with_outer_location(raw_key.as_loc_item()).into_owned(py));
280280
}
281281
}
282-
Err(err) => return Err(err.duplicate(py)),
282+
Err(err) => return Err(err.into_owned(py)),
283283
}
284284
} else {
285285
model_extra_dict.set_item(py_key, value.to_object(py))?;

src/validators/typed_dict.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -206,11 +206,11 @@ impl Validator for TypedDictValidator {
206206
errors.push(
207207
lookup_path
208208
.apply_error_loc(err, self.loc_by_alias, &field.name)
209-
.duplicate(py)
209+
.into_owned(py)
210210
);
211211
}
212212
}
213-
Err(err) => return ControlFlow::Break(err.duplicate(py)),
213+
Err(err) => return ControlFlow::Break(err.into_owned(py)),
214214
}
215215
continue;
216216
} else if let Some(value) = control_flow!(field.validator.default_value(py, Some(field.name.as_str()), state))? {
@@ -240,14 +240,14 @@ impl Validator for TypedDictValidator {
240240
errors.push(
241241
err.with_outer_location(raw_key.as_loc_item())
242242
.with_type(ErrorTypeDefaults::InvalidKey)
243-
.duplicate(py)
243+
.into_owned(py)
244244
);
245245
}
246246
continue;
247247
}
248-
Err(err) => return Err(err.duplicate(py)),
248+
Err(err) => return Err(err.into_owned(py)),
249249
};
250-
let cow = either_str.as_cow().map_err(|err| err.duplicate(py))?;
250+
let cow = either_str.as_cow().map_err(|err| err.into_owned(py))?;
251251
if used_keys.contains(cow.as_ref()) {
252252
continue;
253253
}
@@ -262,7 +262,7 @@ impl Validator for TypedDictValidator {
262262
value,
263263
raw_key.as_loc_item(),
264264
)
265-
.duplicate(py)
265+
.into_owned(py)
266266
);
267267
}
268268
ExtraBehavior::Ignore => {}
@@ -278,11 +278,11 @@ impl Validator for TypedDictValidator {
278278
errors.push(
279279
err
280280
.with_outer_location(raw_key.as_loc_item())
281-
.duplicate(py)
281+
.into_owned(py)
282282
);
283283
}
284284
}
285-
Err(err) => return Err(err.duplicate(py)),
285+
Err(err) => return Err(err.into_owned(py)),
286286
}
287287
} else {
288288
output_dict.set_item(py_key, value.to_object(py))?;

0 commit comments

Comments
 (0)