@@ -224,29 +224,30 @@ impl<T: Debug> LiteralLookup<T> {
224
224
return Ok ( None ) ;
225
225
} ;
226
226
227
+ let is_equal = |k : & i64 | -> PyResult < bool > {
228
+ let equality = py_input. call_method1 ( "__eq__" , ( * k, ) ) ?;
229
+ equality. extract :: < bool > ( )
230
+ } ;
231
+
227
232
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] ) ) ;
234
237
}
235
238
} ;
236
239
237
240
let Some ( expected_strings) = & self . expected_str else {
238
241
return Ok ( None ) ;
239
242
} ;
240
243
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] ) ) ;
250
251
}
251
252
Ok ( None )
252
253
}
0 commit comments