¿Cómo detengo la iteración y devuelvo un error cuando Iterator :: map devuelve un Result :: Err?
Tengo una función que devuelve unResult
:
fn find(id: &Id) -> Result<Item, ItemError> {
// ...
}
Luego otro usándolo así:
let parent_items: Vec<Item> = parent_ids.iter()
.map(|id| find(id).unwrap())
.collect();
¿Cómo manejo el caso de falla dentro de cualquiera de losmap
iteraciones?
Sé que podría usarflat_map
y en este caso los resultados del error seríanignorado:
let parent_items: Vec<Item> = parent_ids.iter()
.flat_map(|id| find(id).into_iter())
.collect();
Result
El iterador tiene 0 o 1 elementos según el estado de éxito, yflat_map
lo filtrará si es 0.
Sin embargo, no quieroignorar errores, quiero hacer que todo el bloque de código simplemente se detenga y devuelva un nuevo error (basado en el error que apareció en el mapa, o simplemente reenviar el error existente).
¿Cómo manejo mejor esto en Rust?