| Crates.io | either-both |
| lib.rs | either-both |
| version | 1.0.0 |
| created_at | 2025-09-13 16:10:21.529285+00 |
| updated_at | 2025-09-13 16:10:21.529285+00 |
| description | An enum similar to the well-known `Either`, but with a `Both` variant |
| homepage | |
| repository | https://github.com/spenserblack/either-both |
| max_upload_size | |
| id | 1837827 |
| size | 80,678 |
either-bothThis crate is intended to be similar to either,
but also cover the "both" variant.
This crate was inspired by wanting to implement a method similar to
[Iterator::zip] that continues until both zipped iterators are exhausted.
A common use case could be replacing the type (Option<L>, Option<R>) where
the (None, None) variant is impossible.
use either_both::prelude::*;
pub struct ZipToEnd<A: Iterator, B: Iterator>(A, B);
impl<A: Iterator, B: Iterator> Iterator for ZipToEnd<A, B> {
type Item = Either<<A as Iterator>::Item, <B as Iterator>::Item>;
fn next(&mut self) -> Option<Self::Item> {
let either = match (self.0.next(), self.1.next()) {
(Some(a), Some(b)) => Both(a, b),
(Some(a), None) => Left(a),
(None, Some(b)) => Right(b),
(None, None) => return None,
};
Some(either)
}
}