Either
The enum Either with variants Left and Right and trait implementations including Iterator, Read, Write.
Either has methods that are similar to Option and Result.
Includes convenience macros try_left!() and try_right!() to use for short-circuiting logic.
Please read the API documentation here
How to use with cargo:
[dependencies] either = "1.8"
Recent Changes
- 1.9.0
- Add new methods .map_either() and .map_either_with(), by @nasadorian (#82)
- 1.8.1
- Clarified that the multiple licenses are combined with OR.
- 1.8.0
- MSRV: either now requires Rust 1.36 or later.
- Add new methods .as_pin_ref() and .as_pin_mut() to project a pinned Either as inner Pin variants, by @cuviper (#77)
- Implement the Future trait, by @cuviper (#77)
- Specialize more methods of the io traits, by @Kixunil and @cuviper (#75)
- 1.7.0
- MSRV: either now requires Rust 1.31 or later.
- Export the macro for_both!, by @thomaseizinger (#58)
- Implement the io::Seek trait, by @Kerollmops (#60)
- Add new method .either_into() for Into conversion, by @TonalidadeHidrica (#63)
- Add new methods .factor_ok(), .factor_err(), and .factor_none(), by @zachs18 (#67)
- Specialize source in the Error implementation, by @thomaseizinger (#69)
- Specialize more iterator methods and implement the FusedIterator trait, by @Ten0 (#66) and @cuviper (#71)
- Specialize Clone::clone_from, by @cuviper (#72)
- 1.6.1
- Add new methods .expect_left(), .unwrap_left(), and equivalents on the right, by @spenserblack (#51)
- 1.6.0
- Add new modules serde_untagged and serde_untagged_optional to customize how Either fields are serialized in other types, by @MikailBag (#49)
- 1.5.3
- Add new method .map() for Either<T, T> by @nvzqz (#40).
- 1.5.2
- Add new methods .left_or(), .left_or_default(), .left_or_else(), and equivalents on the right, by @DCjanus (#36)
- 1.5.1
- Add AsRef and AsMut implementations for common unsized types: str, [T], CStr, OsStr, and Path, by @mexus (#29)
- 1.5.0
- Add new methods .factor_first(), .factor_second() and .into_inner() by @mathstuf (#19)
- 1.4.0
- Add inherent method .into_iter() by @cuviper (#12)
- 1.3.0
- Add opt-in serde support by @hcpl
- 1.2.0
- Add method .either_with() by @Twey (#13)
- 1.1.0
- Add methods left_and_then, right_and_then by @rampantmonkey
- Include license files in the repository and released crate
- 1.0.3
- Add crate categories
- 1.0.2
- Forward more Iterator methods
- Implement Extend for Either<L, R> if L, R do.
- 1.0.1
- Fix Iterator impl for Either to forward .fold().
- 1.0.0
- Add default crate feature use_std so that you can opt out of linking to std.
- 0.1.7
- Add methods .map_left(), .map_right() and .either().
- Add more documentation
- 0.1.3
- Implement Display, Error
- 0.1.2
- Add macros try_left! and try_right!.
- 0.1.1
- Implement Deref, DerefMut
- 0.1.0
- Initial release
- Support Iterator, Read, Write
License
Dual-licensed to be compatible with the Rust project.
Licensed under the Apache License, Version 2.0 https://www.apache.org/licenses/LICENSE-2.0 or the MIT license https://opensource.org/licenses/MIT, at your option. This file may not be copied, modified, or distributed except according to those terms.