I've been playing around with a new project that uses a lot of collections of results, for example Vec<Result<()>> and asked some folks on Rust if they new a good way of transforming this into a Result<Vec<()>>.
Turns out, .collect() can do it for you!
use std::io::{Error, ErrorKind};
fn main() {
let results = vec![
Ok(0),
Ok(1),
Ok(2),
Err(Error::new(ErrorKind::Other, "I'm an error!")),
];
let error = results.into_iter()
.collect::<Result<Vec<usize>, Error>>();
println!("{:?}", error);
let results = vec![
Ok(0),
Ok(1),
Ok(2),
];
let okay = results.into_iter()
.collect::<Result<Vec<usize>, Error>>();
println!("{:?}", okay);
}
// Err(Error { repr: Custom(Custom
// { kind: Other, error: StringError("I\'m an error!")
// }) })
// Ok([0, 1, 2])
Isn't that handy! I hope this is useful to your in your projects! Playpen Link