[−][src]Trait bool_ext::BoolExt
BoolExt
trait defines and implements a complete set of Boolean functional combinators.
Required methods
fn as_option(self) -> Option<()>
Boolean to Option
(bool
=> Option<T>
) adapters
Transforms true
=> Some(())
, false
=> None
Examples:
use assert2::assert; use bool_ext::BoolExt; let vec = vec![1, 2, 3]; assert!(vec.contains(&2).as_option() == Some(()));
use assert2::assert; use bool_ext::BoolExt; let vec = vec![1, 2, 3]; assert!(vec.contains(&4).as_option() == None);
fn some<T>(self, some: T) -> Option<T>
Transforms true
=> Some(T)
, false
=> None
Examples:
use assert2::assert; use bool_ext::BoolExt; #[derive(Debug, PartialEq)] struct Foo; let vec = vec![1, 2, 3]; assert!(vec.contains(&2).some(Foo) == Some(Foo));
use assert2::assert; use bool_ext::BoolExt; #[derive(Debug, PartialEq)] struct Foo; let vec = vec![1, 2, 3]; assert!(vec.contains(&4).some(Foo) == None);
fn some_with<F: FnOnce() -> T, T>(self, some: F) -> Option<T>
Transforms true
=> Some(T)
, false
=> None
, lazily evaluated
Examples:
use assert2::assert; use bool_ext::BoolExt; #[derive(Debug, PartialEq)] struct Foo; fn expensive_computation() -> Foo { // ...expensive computation Foo } let vec = vec![1, 2, 3]; assert!(vec.contains(&2).some_with(|| expensive_computation()) == Some(Foo));
use assert2::assert; use bool_ext::BoolExt; #[derive(Debug, PartialEq)] struct Foo; fn expensive_computation() -> Foo { // ...some expensive computation Foo } let vec = vec![1, 2, 3]; // elide `expensive_computation()` assert!(vec.contains(&4).some_with(|| expensive_computation()) == None);
fn as_result(self) -> Result<(), ()>
bool
=> Result<T, E>
Transforms true
=> Ok(())
, false
=> Err(())
Examples:
use assert2::assert; use bool_ext::BoolExt; let vec = vec![1, 2, 3]; assert!(vec.contains(&2).as_result() == Ok(()));
use assert2::assert; use bool_ext::BoolExt; let vec = vec![1, 2, 3]; assert!(vec.contains(&4).as_result() == Err(()));
fn ok<T>(self, ok: T) -> Result<T, ()>
Transforms true
=> Ok(T)
, false
=> Err(())
Examples:
use assert2::assert; use bool_ext::BoolExt; #[derive(Debug, PartialEq)] struct Foo; let vec = vec![1, 2, 3]; assert!(vec.contains(&2).ok(Foo) == Ok(Foo));
use assert2::assert; use bool_ext::BoolExt; #[derive(Debug, PartialEq)] struct Foo; let vec = vec![1, 2, 3]; assert!(vec.contains(&4).ok(Foo) == Err(()));
fn ok_with<F: FnOnce() -> T, T>(self, ok: F) -> Result<T, ()>
Transforms true
=> Ok(T)
, false
=> Err(())
, lazily evaluated
Examples:
use assert2::assert; use bool_ext::BoolExt; #[derive(Debug, PartialEq)] struct Foo; fn expensive_computation() -> Foo { // ...expensive computation Foo } let vec = vec![1, 2, 3]; assert!(vec.contains(&2).ok_with(|| expensive_computation()) == Ok(Foo));
use assert2::assert; use bool_ext::BoolExt; #[derive(Debug, PartialEq)] struct Foo; fn expensive_computation() -> Foo { // ...some expensive computation Foo } let vec = vec![1, 2, 3]; // elide `expensive_computation()` assert!(vec.contains(&4).ok_with(|| expensive_computation()) == Err(()));
fn ok_or_err<T, E>(self, ok: T, err: E) -> Result<T, E>
Transforms true
=> Ok(T)
, false
=> Err(E)
Examples:
use assert2::assert; use bool_ext::BoolExt; use std::fmt::Formatter; #[derive(Debug, PartialEq)] struct Foo; #[derive(Debug, PartialEq)] struct Error; impl std::error::Error for Error {} impl std::fmt::Display for Error { fn fmt(&self,f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "BoolExt Example Error") } } let vec = vec![1, 2, 3]; assert!(vec.contains(&2).ok_or_err(Foo, Error) == Ok(Foo));
use assert2::assert; use bool_ext::BoolExt; #[derive(Debug, PartialEq)] struct Foo; #[derive(Debug, PartialEq)] struct Error; impl std::error::Error for Error {} impl std::fmt::Display for Error { fn fmt(&self,f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "BoolExt Example Error") } } let vec = vec![1, 2, 3]; assert!(vec.contains(&4).ok_or_err(Foo, Error) == Err(Error));
fn ok_or_err_with<F: FnOnce() -> T, G: FnOnce() -> E, T, E>(
self,
ok: F,
err: G
) -> Result<T, E>
self,
ok: F,
err: G
) -> Result<T, E>
Transforms true
=> Ok(T)
, false
=> Err(E)
, lazily evaluated
Examples:
use assert2::assert; use bool_ext::BoolExt; #[derive(Debug, PartialEq)] struct Foo; fn expensive_ok_computation() -> Foo { // ...expensive computation Foo } #[derive(Debug, PartialEq)] struct Bar; fn expensive_err_computation() -> Bar { // ...expensive computation Bar } let vec = vec![1, 2, 3]; assert!(vec.contains(&2).ok_or_err_with( || expensive_ok_computation(), || expensive_err_computation()) == Ok(Foo));
use assert2::assert; use bool_ext::BoolExt; #[derive(Debug, PartialEq)] struct Foo; fn expensive_ok_computation() -> Foo { // ...some expensive computation Foo } #[derive(Debug, PartialEq)] struct Bar; fn expensive_err_computation() -> Bar { // ...expensive computation Bar } let vec = vec![1, 2, 3]; // elide `expensive_computation()` assert!(vec.contains(&4).ok_or_err_with( || expensive_ok_computation(), || expensive_err_computation()) == Err(Bar));
fn map_or<F: FnOnce() -> T, T>(self, default: T, t: F) -> T
bool
=> T
Transforms true
=> T
, false
=> T
Examples:
use assert2::assert; use bool_ext::BoolExt; use std::fmt::Formatter; #[derive(Debug, PartialEq)] let vec = vec![1, 2, 3]; assert!(vec.contains(&2).map_or(0, || { //... some computation 42 }) == 42);
use assert2::assert; use bool_ext::BoolExt; use std::fmt::Formatter; #[derive(Debug, PartialEq)] let vec = vec![1, 2, 3]; assert!(vec.contains(&4).map_or(None, || { //... some computation Some(42) }) == None);
fn map_or_default<F: FnOnce() -> T, T: Default>(self, t: F) -> T
bool
=> T
Transforms true
=> T
, false
=> T::default()
Examples:
use assert2::assert; use bool_ext::BoolExt; use std::fmt::Formatter; #[derive(Debug, PartialEq)] let vec = vec![1, 2, 3]; assert!(vec.contains(&2).map_or_default(|| { //... some computation 42 }) == 42);
use assert2::assert; use bool_ext::BoolExt; use std::fmt::Formatter; #[derive(Debug, PartialEq)] let vec = vec![1, 2, 3]; assert!(vec.contains(&4).map_or_default(|| { //... some computation Some(42) }) == None);
fn map_or_else<F: FnOnce() -> T, G: FnOnce() -> T, T>(self, t: F, f: G) -> T
bool
=> T
Transforms true
=> T
, false
=> T
Examples:
use assert2::assert; use bool_ext::BoolExt; use std::fmt::Formatter; #[derive(Debug, PartialEq)] enum SetPresence { In, Out, } let vec = vec![1, 2, 3]; assert!(vec.contains(&2).map_or_else( || SetPresence::In, || SetPresence::Out) == SetPresence::In);
use assert2::assert; use bool_ext::BoolExt; use std::fmt::Formatter; #[derive(Debug, PartialEq)] enum SetPresence { In, Out, } let vec = vec![1, 2, 3]; assert!(vec.contains(&4).map_or_else( || SetPresence::In, || SetPresence::Out) == SetPresence::Out);
fn and_do<F: FnOnce()>(self, t: F) -> bool
Perform side-effect if true
, otherwise do nothing
Examples:
use assert2::assert; use bool_ext::BoolExt; #[derive(Debug, PartialEq)] struct Foo; let mut vec = vec![1, 2, 3]; vec.contains(&2).and_do(|| vec.iter_mut().for_each(|el| *el = -*el)); assert!(vec.eq(&[-1, -2, -3]));
fn or_do<F: FnOnce()>(self, f: F) -> bool
Perform side-effect if false
, otherwise do nothing
Examples:
use assert2::assert; use bool_ext::BoolExt; #[derive(Debug, PartialEq)] struct Foo; let mut vec = vec![1, 2, 3]; vec.contains(&4).or_do(|| vec.push(4)); assert!(vec.eq(&[1, 2, 3, 4]));
fn expect(self, msg: &str)
Transforms false
=> panic!()
panic with message if false
, otherwise do nothing
Examples:
use assert2::assert; use bool_ext::BoolExt; #[derive(Debug, PartialEq)] struct Foo; let mut vec = vec![1, 2, 3]; let res = std::panic::catch_unwind(|| { vec.contains(&2).expect("Test expected `true`, but found `false`"); }); // Did not panic assert!(res.is_ok());
use assert2::assert; use bool_ext::BoolExt; #[derive(Debug, PartialEq)] struct Foo; let mut vec = vec![1, 2, 3]; let res = std::panic::catch_unwind(|| { vec.contains(&4).expect("Test expected `true`, but found `false`"); }); // Panicked assert!(res.is_err());
Implementations on Foreign Types
impl BoolExt for bool
[src]
fn as_option(self) -> Option<()>
[src]
fn some<T>(self, some: T) -> Option<T>
[src]
fn some_with<F: FnOnce() -> T, T>(self, some: F) -> Option<T>
[src]
fn as_result(self) -> Result<(), ()>
[src]
fn ok<T>(self, ok: T) -> Result<T, ()>
[src]
fn ok_with<F: FnOnce() -> T, T>(self, ok: F) -> Result<T, ()>
[src]
fn ok_or_err<T, E>(self, ok: T, err: E) -> Result<T, E>
[src]
fn ok_or_err_with<F: FnOnce() -> T, G: FnOnce() -> E, T, E>(
self,
ok: F,
err: G
) -> Result<T, E>
[src]
self,
ok: F,
err: G
) -> Result<T, E>