Skip to content

Commit f36e34c

Browse files
committed
remove duplication
1 parent 91ff134 commit f36e34c

File tree

6 files changed

+30
-105
lines changed

6 files changed

+30
-105
lines changed

src/input/iterator.rs

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -115,39 +115,7 @@ impl<'data> IterableValidationChecks<'data> {
115115
}
116116

117117
#[allow(clippy::too_many_arguments)]
118-
pub fn validate_infallible_iterator<'s, 'data, V, O, W, L>(
119-
py: Python<'data>,
120-
input: &'data impl Input<'data>,
121-
extra: &'s Extra<'s>,
122-
definitions: &'data Definitions<CombinedValidator>,
123-
recursion_guard: &'s mut RecursionGuard,
124-
checks: &mut IterableValidationChecks<'data>,
125-
iter: impl Iterator<Item = &'data V>,
126-
items_validator: &'s CombinedValidator,
127-
output: &mut O,
128-
write: &mut W,
129-
len: &L,
130-
) -> ValResult<'data, ()>
131-
where
132-
V: Input<'data> + 'data,
133-
W: FnMut(&mut O, PyObject) -> PyResult<()>,
134-
L: Fn(&O) -> usize,
135-
{
136-
for (index, value) in iter.enumerate() {
137-
let result = items_validator
138-
.validate(py, value, extra, definitions, recursion_guard)
139-
.map_err(|e| e.with_outer_location(index.into()));
140-
if let Some(value) = checks.filter_validation_result(result, input)? {
141-
write(output, value)?;
142-
checks.check_output_length(len(output), input)?;
143-
}
144-
}
145-
checks.finish(input)?;
146-
Ok(())
147-
}
148-
149-
#[allow(clippy::too_many_arguments)]
150-
pub fn validate_fallible_iterator<'s, 'data, V, O, W, L>(
118+
pub fn validate_iterator<'s, 'data, V, O, W, L>(
151119
py: Python<'data>,
152120
input: &'data impl Input<'data>,
153121
extra: &'s Extra<'s>,

src/validators/dict.rs

Lines changed: 4 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -125,43 +125,6 @@ where
125125
Ok(())
126126
}
127127

128-
#[allow(clippy::too_many_arguments)]
129-
fn validate_infallible_mapping<'s, 'data, K, V>(
130-
py: Python<'data>,
131-
input: &'data impl Input<'data>,
132-
extra: &'s Extra<'s>,
133-
definitions: &'data Definitions<CombinedValidator>,
134-
recursion_guard: &'s mut RecursionGuard,
135-
checks: &mut IterableValidationChecks<'data>,
136-
iter: impl Iterator<Item = (&'data K, &'data V)>,
137-
key_validator: &'s CombinedValidator,
138-
value_validator: &'s CombinedValidator,
139-
output: &'data PyDict,
140-
) -> ValResult<'data, ()>
141-
where
142-
K: Input<'data> + 'data,
143-
V: Input<'data> + 'data,
144-
{
145-
for (key, value) in iter {
146-
let result = validation_function(
147-
py,
148-
extra,
149-
definitions,
150-
recursion_guard,
151-
key_validator,
152-
value_validator,
153-
key,
154-
value,
155-
);
156-
if let Some((key, value)) = checks.filter_validation_result(result, input)? {
157-
output.set_item(key, value)?;
158-
checks.check_output_length(output.len(), input)?;
159-
}
160-
}
161-
checks.finish(input)?;
162-
Ok(())
163-
}
164-
165128
impl Validator for DictValidator {
166129
fn validate<'s, 'data>(
167130
&'s self,
@@ -187,26 +150,26 @@ impl Validator for DictValidator {
187150
.map_err(|_| ValError::new(ErrorType::DictType, input))?;
188151
match (generic_iterable, strict) {
189152
// Always allow actual dicts or JSON objects
190-
(GenericIterable::Dict(iter), _) => validate_infallible_mapping(
153+
(GenericIterable::Dict(iter), _) => validate_mapping(
191154
py,
192155
input,
193156
extra,
194157
definitions,
195158
recursion_guard,
196159
&mut checks,
197-
iter.iter(),
160+
iter.iter().map(Ok),
198161
&self.key_validator,
199162
&self.value_validator,
200163
output,
201164
)?,
202-
(GenericIterable::JsonObject(iter), _) => validate_infallible_mapping(
165+
(GenericIterable::JsonObject(iter), _) => validate_mapping(
203166
py,
204167
input,
205168
extra,
206169
definitions,
207170
recursion_guard,
208171
&mut checks,
209-
iter.iter().map(|(k, v)| (k, v)),
172+
iter.iter().map(|(k, v)| (k, v)).map(Ok),
210173
&self.key_validator,
211174
&self.value_validator,
212175
output,

src/validators/frozenset.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@ use super::{build_validator, BuildValidator, CombinedValidator, Definitions, Def
77
use crate::build_tools::SchemaDict;
88
use crate::errors::ErrorType;
99
use crate::errors::ValResult;
10-
use crate::input::iterator::{
11-
validate_fallible_iterator, validate_infallible_iterator, IterableValidationChecks, LengthConstraints,
12-
};
10+
use crate::input::iterator::{validate_iterator, IterableValidationChecks, LengthConstraints};
1311
use crate::input::Input;
1412
use crate::input::{py_error_on_minusone, GenericIterable};
1513
use crate::recursion_guard::RecursionGuard;
@@ -69,27 +67,27 @@ impl Validator for FrozenSetValidator {
6967

7068
match (generic_iterable, strict) {
7169
// Always allow actual lists or JSON arrays
72-
(GenericIterable::JsonArray(iter), _) => validate_infallible_iterator(
70+
(GenericIterable::JsonArray(iter), _) => validate_iterator(
7371
py,
7472
input,
7573
extra,
7674
definitions,
7775
recursion_guard,
7876
&mut checks,
79-
iter.iter(),
77+
iter.iter().map(Ok),
8078
&self.item_validator,
8179
&mut output,
8280
&mut write,
8381
&len,
8482
)?,
85-
(GenericIterable::FrozenSet(iter), _) => validate_infallible_iterator(
83+
(GenericIterable::FrozenSet(iter), _) => validate_iterator(
8684
py,
8785
input,
8886
extra,
8987
definitions,
9088
recursion_guard,
9189
&mut checks,
92-
iter.iter(),
90+
iter.iter().map(Ok),
9391
&self.item_validator,
9492
&mut output,
9593
&mut write,
@@ -107,7 +105,7 @@ impl Validator for FrozenSetValidator {
107105
false,
108106
) => return Err(create_err(input)),
109107
(generic_iterable, false) => match generic_iterable.into_sequence_iterator(py) {
110-
Ok(iter) => validate_fallible_iterator(
108+
Ok(iter) => validate_iterator(
111109
py,
112110
input,
113111
extra,

src/validators/list.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@ use pyo3::types::PyDict;
33

44
use crate::build_tools::SchemaDict;
55
use crate::errors::{ErrorType, ValError, ValResult};
6-
use crate::input::iterator::{
7-
calculate_output_init_capacity, validate_fallible_iterator, validate_infallible_iterator, IterableValidationChecks,
8-
};
6+
use crate::input::iterator::{calculate_output_init_capacity, validate_iterator, IterableValidationChecks};
97
use crate::input::Input;
108
use crate::input::{iterator::LengthConstraints, GenericIterable};
119
use crate::recursion_guard::RecursionGuard;
@@ -100,27 +98,27 @@ impl Validator for ListValidator {
10098

10199
match (generic_iterable, strict) {
102100
// Always allow actual lists or JSON arrays
103-
(GenericIterable::JsonArray(iter), _) => validate_infallible_iterator(
101+
(GenericIterable::JsonArray(iter), _) => validate_iterator(
104102
py,
105103
input,
106104
extra,
107105
definitions,
108106
recursion_guard,
109107
&mut checks,
110-
iter.iter(),
108+
iter.iter().map(Ok),
111109
&self.item_validator,
112110
&mut output,
113111
&mut write,
114112
&len,
115113
)?,
116-
(GenericIterable::List(iter), _) => validate_infallible_iterator(
114+
(GenericIterable::List(iter), _) => validate_iterator(
117115
py,
118116
input,
119117
extra,
120118
definitions,
121119
recursion_guard,
122120
&mut checks,
123-
iter.iter(),
121+
iter.iter().map(Ok),
124122
&self.item_validator,
125123
&mut output,
126124
&mut write,
@@ -138,7 +136,7 @@ impl Validator for ListValidator {
138136
_,
139137
) => return Err(ValError::new(ErrorType::ListType, input)),
140138
(generic_iterable, false) => match generic_iterable.into_sequence_iterator(py) {
141-
Ok(iter) => validate_fallible_iterator(
139+
Ok(iter) => validate_iterator(
142140
py,
143141
input,
144142
extra,

src/validators/set.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@ use pyo3::types::{PyDict, PySet};
44
use super::{BuildValidator, Definitions, DefinitionsBuilder, Extra, Validator};
55
use crate::build_tools::SchemaDict;
66
use crate::errors::{ErrorType, ValError, ValResult};
7-
use crate::input::iterator::{
8-
validate_fallible_iterator, validate_infallible_iterator, IterableValidationChecks, LengthConstraints,
9-
};
7+
use crate::input::iterator::{validate_iterator, IterableValidationChecks, LengthConstraints};
108
use crate::input::{GenericIterable, Input};
119
use crate::recursion_guard::RecursionGuard;
1210
use crate::validators::any::AnyValidator;
@@ -87,27 +85,27 @@ impl Validator for SetValidator {
8785

8886
match (generic_iterable, strict) {
8987
// Always allow actual lists or JSON arrays
90-
(GenericIterable::JsonArray(iter), _) => validate_infallible_iterator(
88+
(GenericIterable::JsonArray(iter), _) => validate_iterator(
9189
py,
9290
input,
9391
extra,
9492
definitions,
9593
recursion_guard,
9694
&mut checks,
97-
iter.iter(),
95+
iter.iter().map(Ok),
9896
&self.item_validator,
9997
&mut output,
10098
&mut write,
10199
&len,
102100
)?,
103-
(GenericIterable::Set(iter), _) => validate_infallible_iterator(
101+
(GenericIterable::Set(iter), _) => validate_iterator(
104102
py,
105103
input,
106104
extra,
107105
definitions,
108106
recursion_guard,
109107
&mut checks,
110-
iter.iter(),
108+
iter.iter().map(Ok),
111109
&self.item_validator,
112110
&mut output,
113111
&mut write,
@@ -125,7 +123,7 @@ impl Validator for SetValidator {
125123
false,
126124
) => return Err(create_err(input)),
127125
(generic_iterable, false) => match generic_iterable.into_sequence_iterator(py) {
128-
Ok(iter) => validate_fallible_iterator(
126+
Ok(iter) => validate_iterator(
129127
py,
130128
input,
131129
extra,

src/validators/tuple.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ use pyo3::types::{PyDict, PyList, PyTuple};
55
use crate::build_tools::{is_strict, SchemaDict};
66
use crate::errors::ValLineError;
77
use crate::errors::{ErrorType, ValError, ValResult};
8-
use crate::input::iterator::validate_infallible_iterator;
8+
use crate::input::iterator::calculate_output_init_capacity;
9+
use crate::input::iterator::validate_iterator;
910
use crate::input::iterator::IterableValidationChecks;
1011
use crate::input::iterator::LengthConstraints;
11-
use crate::input::iterator::{calculate_output_init_capacity, validate_fallible_iterator};
1212
use crate::input::{GenericIterable, Input};
1313
use crate::recursion_guard::RecursionGuard;
1414

@@ -82,27 +82,27 @@ impl Validator for TupleVariableValidator {
8282

8383
match (generic_iterable, strict) {
8484
// Always allow actual lists or JSON arrays
85-
(GenericIterable::JsonArray(iter), _) => validate_infallible_iterator(
85+
(GenericIterable::JsonArray(iter), _) => validate_iterator(
8686
py,
8787
input,
8888
extra,
8989
definitions,
9090
recursion_guard,
9191
&mut checks,
92-
iter.iter(),
92+
iter.iter().map(Ok),
9393
&self.item_validator,
9494
&mut output,
9595
&mut write,
9696
&len,
9797
)?,
98-
(GenericIterable::Tuple(iter), _) => validate_infallible_iterator(
98+
(GenericIterable::Tuple(iter), _) => validate_iterator(
9999
py,
100100
input,
101101
extra,
102102
definitions,
103103
recursion_guard,
104104
&mut checks,
105-
iter.iter(),
105+
iter.iter().map(Ok),
106106
&self.item_validator,
107107
&mut output,
108108
&mut write,
@@ -120,7 +120,7 @@ impl Validator for TupleVariableValidator {
120120
_,
121121
) => return Err(ValError::new(ErrorType::TupleType, input)),
122122
(generic_iterable, false) => match generic_iterable.into_sequence_iterator(py) {
123-
Ok(iter) => validate_fallible_iterator(
123+
Ok(iter) => validate_iterator(
124124
py,
125125
input,
126126
extra,

0 commit comments

Comments
 (0)