must 0.2.0

assertion library for rust
Documentation
use errors::ErrorKind;
use lazy::{LazyAssertion, LazyMatcher, SimpleAssert};
use std::fmt::Debug;


/// Extension for [Result][]
///
///
///
/// [Result]:https://doc.rust-lang.org/std/result/enum.Result.html
pub trait ResultMust<O: Debug, E: Debug>: Sized + Debug {
	/// # Examples
	///
	/// ```rust
	/// #[macro_use] extern crate must;
	/// use must::prelude::*;
	/// # extern crate env_logger;
	/// # fn main() {
	/// # let _ = env_logger::init();
	/// let ok: Result<i64, String> = Ok(5);
	/// let val: i64 = ok.must_be_ok().take();
	/// val.must_be(5);
	/// # }
	/// ```
	fn must_be_ok(self) -> SimpleAssert<O>;

	/// # Examples
	///
	/// ```rust
	/// #[macro_use] extern crate must;
	/// use must::prelude::*;
	/// # extern crate env_logger;
	/// # fn main() {
	/// # let _ = env_logger::init();
	/// let ok: Result<i64, String> = Ok(5);
	/// ok.must_be_ok_and(|val| {
	/// 	val.must_be(5)
	/// }).or(fail!());
	/// # }
	/// ```
	/// ```rust,should_panic
	/// #[macro_use] extern crate must;
	/// use must::prelude::*;
	/// # extern crate env_logger;
	/// # fn main() {
	/// # let _ = env_logger::init();
	/// let ok: Result<u64, &str> = Err("failed to parse \"25'11Y5\" as u64");
	/// ok.must_be_ok_and(|val| {
	/// 	// unreachable!()
	/// 	val.must_be(25115)
	/// }); // panics with 'failed to parse \"25'11Y5\" as u64'
	/// # }
	/// ```
	fn must_be_ok_and<F, R>(self, op: F) -> LazyAssertion<R>
		where F: FnOnce(O) -> LazyAssertion<R>,
		      R: LazyMatcher
	{
		self.must_be_ok().and(op)
	}

	fn must_be_err(self) -> SimpleAssert<E>;

	fn must_be_err_and<F, R>(self, op: F) -> LazyAssertion<R>
		where F: FnOnce(E) -> LazyAssertion<R>,
		      R: LazyMatcher
	{
		self.must_be_err().and(op)
	}
}

impl<O: Debug, E: Debug> ResultMust<O, E> for Result<O, E> {
	fn must_be_ok(self) -> SimpleAssert<O> {
		match self {
			Ok(val) => val.into(),
			Err(err) => ErrorKind::MustBeOk {}.but_got(err),
		}
	}

	fn must_be_err(self) -> SimpleAssert<E> {
		match self {
			Ok(val) => ErrorKind::MustBeErr {}.but_got(val),
			Err(err) => err.into(), 
		}
	}
}