Crates.io | vecfold |
lib.rs | vecfold |
version | 0.1.6 |
source | src |
created_at | 2020-04-19 12:27:45.91901 |
updated_at | 2020-04-20 00:09:18.576225 |
description | Fold methods for Vec |
homepage | |
repository | https://github.com/dhilst/vecfold |
max_upload_size | |
id | 231911 |
size | 927,154 |
This package provide a generic way to "unwrap" a Vec<Result<T,E>>
into
Result<Vec<&T>, &E>
. Here is an example:
let valid: Vec<Result<u32, _>> = "1,2,3".split(",").map(|x| x.parse::<u32>()).collect();
let invalid: Vec<Result<u32, _>> = "1,2,a".split(",").map(|x| x.parse::<u32>()).collect();
// happy path, no errors, just the values
assert_eq!(vec![&1, &2, &3], valid.foldr().unwrap());
// sad path returns the error
assert!(invalid.foldr().is_err());
If you need to collect all errors you can use .foldr_bisect
. It converts
Vec<Result<T, E>>
, to (Vec<&T>, Vec<&E>)
.
// happy path, no errors, return empty error vector
assert_eq!((vec![&1, &2, &3], vec![]), valid.foldr_bisect());
// sad path, populate error vector
let (ok, _) = invalid.foldr_bisect();
assert_eq!(vec![&1, &2], ok);