Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
593: EitherOrBoth: Add or and or_else methods to simplify getting default values r=phimuemue a=carl-anders ## Introducing `or` and `or_else` methods to `EitherOrBoth` This feature reduces the amount of code required to get specific default values when using EitherOrBoth. An example of the current way of using `zip_longest` with custom default values: ```rust let a = (0..=4).into_iter(); let b = (0..=2).into_iter(); let c = a.zip_longest(b).map(|e| match e { EitherOrBoth::Both(l, r) => (l, r), EitherOrBoth::Left(l) => (l, 2), EitherOrBoth::Right(r) => (4, r), }); // c will now contain an iterator with (0,0), (1,1), (2,2), (3,2), (4,2). ``` An example with the proposed `or` method: ```rust let a = (0..=4).into_iter(); let b = (0..=2).into_iter(); let c = a.zip_longest(b).map(|e| e.or(4, 2)); // c will now contain an iterator with (0,0), (1,1), (2,2), (3,2), (4,2). ``` I have also included the `or_else` method which does the same but with closures. ## Contribute questions > Include tests for your new feature, preferably a QuickCheck test There are no tests for the other `EitherOrBoth` methods, so I was unsure how to place them. However, I have added **DocTest**'s to both methods. These examples allows for easier to understand documentation, and also tests the validity of the methods. > For new features, please first consider filing a PR to rust-lang/rust The EitherOrBoth struct does not exist in rust std library. ## Concerns The naming is slightly inconsistent when compared to rust's `std::Option`, considering the naming from there the added methods should be named `unwrap_or` and `unwrap_or_else`. However, this would then become inconsistent with the existing method `EitherOrBoth::or_default`. Which is why I went with the chosen names. I can change the method names if needed, but then we should consider changing `or_default` too. ## P.S. The `CHANGELOG.md` file has the text `Add EitherOrBoth::or_default (#583)`. This number is wrong, it should be #538. Co-authored-by: Carl Andersson <[email protected]>
- Loading branch information