Iterator::try_fold provides the framework for what you need, and it's available since Rust 1.27 (Playground):
fn fold_ok(mut iter: I, f: F) -> Result
Before that, I think your only option is manually iterating (Playground)
fn fold_ok(mut iter: I, f: F) -> Result