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.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 pinnedEither
as innerPin
variants, by @cuviper (#77) - Implement the
Future
trait, by @cuviper (#77) - Specialize more methods of the
io
traits, by @Kixunil and @cuviper (#75)
- MSRV:
- 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()
forInto
conversion, by @TonalidadeHidrica (#63) - Add new methods
.factor_ok()
,.factor_err()
, and.factor_none()
, by @zachs18 (#67) - Specialize
source
in theError
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)
- MSRV:
- 1.6.1
- Add new methods
.expect_left()
,.unwrap_left()
, and equivalents on the right, by @spenserblack (#51)
- Add new methods
- 1.6.0
- Add new modules
serde_untagged
andserde_untagged_optional
to customize howEither
fields are serialized in other types, by @MikailBag (#49)
- Add new modules
- 1.5.3
- Add new method
.map()
forEither<T, T>
by @nvzqz (#40).
- Add new method
- 1.5.2
- Add new methods
.left_or()
,.left_or_default()
,.left_or_else()
, and equivalents on the right, by @DCjanus (#36)
- Add new methods
- 1.5.1
- Add
AsRef
andAsMut
implementations for common unsized types:str
,[T]
,CStr
,OsStr
, andPath
, by @mexus (#29)
- Add
- 1.5.0
- Add new methods
.factor_first()
,.factor_second()
and.into_inner()
by @mathstuf (#19)
- Add new methods
- 1.4.0
- Add inherent method
.into_iter()
by @cuviper (#12)
- Add inherent method
- 1.3.0
- Add opt-in serde support by @hcpl
- 1.2.0
- Add method
.either_with()
by @Twey (#13)
- Add method
- 1.1.0
- Add methods
left_and_then
,right_and_then
by @rampantmonkey - Include license files in the repository and released crate
- Add methods
- 1.0.3
- Add crate categories
- 1.0.2
- Forward more
Iterator
methods - Implement
Extend
forEither<L, R>
ifL, R
do.
- Forward more
- 1.0.1
- Fix
Iterator
impl forEither
to forward.fold()
.
- Fix
- 1.0.0
- Add default crate feature
use_std
so that you can opt out of linking to std.
- Add default crate feature
- 0.1.7
- Add methods
.map_left()
,.map_right()
and.either()
. - Add more documentation
- Add methods
- 0.1.3
- Implement Display, Error
- 0.1.2
- Add macros
try_left!
andtry_right!
.
- Add macros
- 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.