¿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();

ResultEl 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?

Respuestas a la pregunta(2)

Su respuesta a la pregunta