1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
use crate::{implementation, BasicAsserter};
use std::fmt::Debug;
impl<OkValue, ErrValue> BasicAsserter<Result<OkValue, ErrValue>>
where
OkValue: Debug,
ErrValue: Debug,
{
/// Asserts that the [Result] is an [Err].
///
/// Allows the usage of chained assertions on an error-type (see [`ErrAsserter`]).
///
/// # Examples
/// ```
/// # use smoothy::assert_that;
/// #
/// let result: Result<(), String> = Err(String::new());
///
/// assert_that(result).is_err();
/// ```
///
/// # Panics
/// When the [Result] is an [Ok]
pub fn is_err(self) -> ErrAsserter<ErrValue> {
implementation::assert(self.value.is_err(), "Result is Err", &self.value);
#[allow(clippy::unwrap_used)]
let value = self.value.err().unwrap();
ErrAsserter { value }
}
}
/// Enables various assertions on [Err]-values
pub struct ErrAsserter<ErrValue> {
value: ErrValue,
}
impl<ErrValue> ErrAsserter<ErrValue> {
/// Prepares the [Err] value for further assertions.
///
/// # Examples
/// ```
/// # use smoothy::{assert_that, BasicAsserter};
/// #
/// let result: Result<(), String> = Err(String::from("Hello World!"));
///
/// let asserter: BasicAsserter<String> = assert_that(result).is_err().and_error();
/// // further assertions
/// asserter.equals("Hello World!");
/// ```
pub fn and_error(self) -> BasicAsserter<ErrValue> {
BasicAsserter { value: self.value }
}
}