pub use either::Either;
use Either::*;
pub trait Eitherable {
fn either<L, R>(&self, left: L, right: R) -> Either<L, R>;
fn either_else<L, FL: FnOnce() -> L, R, FR: FnOnce() -> R>(
&self,
l_func: FL,
r_func: FR,
) -> Either<L, R>;
}
impl Eitherable for bool {
fn either<L, R>(&self, left: L, right: R) -> Either<L, R> {
if *self {
Left(left)
} else {
Right(right)
}
}
fn either_else<L, FL: FnOnce() -> L, R, FR: FnOnce() -> R>(
&self,
l_func: FL,
r_func: FR,
) -> Either<L, R> {
if *self {
Left(l_func())
} else {
Right(r_func())
}
}
}