must 0.2.0

assertion library for rust
Documentation
use errors::ErrorKind;
use lazy::SimpleAssert;
use marker::HasLength;
use std::fmt::Debug;

pub trait MustHaveLength: Debug + HasLength + Sized {
	/// # Examples
	///
	/// ```rust
	/// #[macro_use] extern crate must;
	/// # extern crate env_logger;
	/// use must::prelude::*;
	/// # fn main() {
	/// # let _ = env_logger::init();
	/// String::from("").must_have_len(0);
	/// "&'static str".must_have_len(12);
	///
	/// vec!["aaaaa", "bbbbb", "ccccc"].must_have_len(3);
	/// [1, 2, 3].must_have_len(3);
	/// # }
	/// ```
	fn must_have_len(self, len: usize) -> SimpleAssert<Self> {
		if self.len() == len {
			self.into()
		} else {
			ErrorKind::MustHaveLength { len: len }.but_got(self.len())
		}
	}

	/// # Examples
	///
	/// ```rust
	/// #[macro_use] extern crate must;
	/// use must::prelude::*;
	/// # extern crate env_logger;
	/// # fn main() {
	/// # let _ = env_logger::init();
	/// String::from("").must_be_empty();
	/// "".must_be_empty();
	///
	/// Vec::<String>::new().must_be_empty();
	/// let array: [u8; 0] = [];
	/// array.must_be_empty();
	/// # }
	/// ```
	fn must_be_empty(self) -> SimpleAssert<Self> {
		if self.len() == 0 {
			self.into()
		} else {
			ErrorKind::MustBeEmpty.but_got(self.len())
		}
	}
}


impl<'a, T: Sized> MustHaveLength for T where T: Debug + HasLength {}



fn _assert() {
	fn len<T: MustHaveLength>() {}

	len::<&str>();
	len::<String>();
	len::<Vec<u8>>();
	len::<[u8; 0]>();
	len::<&[u8]>();
}