Skip to content

Commit a5e1d3d

Browse files
refactor: minor refactoring for try_validate_any
1 parent 80308f3 commit a5e1d3d

File tree

1 file changed

+16
-15
lines changed

1 file changed

+16
-15
lines changed

src/validators/literal.rs

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -224,29 +224,30 @@ impl<T: Debug> LiteralLookup<T> {
224224
return Ok(None);
225225
};
226226

227+
let is_equal = |k: &i64| -> PyResult<bool> {
228+
let equality = py_input.call_method1("__eq__", (*k,))?;
229+
equality.extract::<bool>()
230+
};
231+
227232
if let Some(expected_ints) = &self.expected_int {
228-
for (k, id) in expected_ints {
229-
if let Ok(equality) = py_input.call_method1("__eq__", (*k,)) {
230-
if equality.extract::<bool>()? {
231-
return Ok(Some(&self.values[*id]));
232-
}
233-
};
233+
let id = expected_ints.iter().find(|(k, _)| is_equal(k).unwrap_or(false));
234+
235+
if let Some((_, id)) = id {
236+
return Ok(Some(&self.values[*id]));
234237
}
235238
};
236239

237240
let Some(expected_strings) = &self.expected_str else {
238241
return Ok(None);
239242
};
240243

241-
for (k, id) in expected_strings {
242-
let Ok(k_as_int) = k.parse::<i64>() else {
243-
continue;
244-
};
245-
if let Ok(equality) = py_input.call_method1("__eq__", (k_as_int,)) {
246-
if equality.extract::<bool>()? {
247-
return Ok(Some(&self.values[*id]));
248-
}
249-
};
244+
let id = expected_strings
245+
.iter()
246+
.filter_map(|(k, id)| k.parse::<i64>().ok().map(|k_as_int| (k_as_int, id)))
247+
.find(|(k, _)| is_equal(k).unwrap_or(false));
248+
249+
if let Some((_, id)) = id {
250+
return Ok(Some(&self.values[*id]));
250251
}
251252
Ok(None)
252253
}

0 commit comments

Comments
 (0)