use errors::ErrorKind;
use lazy::SimpleAssert;
use marker::HasLength;
use std::fmt::Debug;
pub trait MustHaveLength: Debug + HasLength + Sized {
fn must_have_len(self, len: usize) -> SimpleAssert<Self> {
if self.len() == len {
self.into()
} else {
ErrorKind::MustHaveLength { len: len }.but_got(self.len())
}
}
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]>();
}