must 0.2.0

assertion library for rust
Documentation

pub trait HasLength {
	fn len(&self) -> usize;
}


impl<T> HasLength for [T] {
	fn len(&self) -> usize {
		self.len()
	}
}

impl<T> HasLength for Vec<T> {
	fn len(&self) -> usize {
		self.len()
	}
}

impl HasLength for str {
	fn len(&self) -> usize {
		self.len()
	}
}

impl HasLength for String {
	fn len(&self) -> usize {
		self.len()
	}
}

macro_rules! impl_for_arr {
	($n:expr) => {
// start of macro


impl<T> HasLength for [T; $n] {
	fn len(&self) -> usize {
		$n
	}
}

// end of macro
	}
}
impl_for_arr!(0);
impl_for_arr!(1);
impl_for_arr!(2);
impl_for_arr!(3);
impl_for_arr!(4);
impl_for_arr!(5);
impl_for_arr!(6);
impl_for_arr!(7);
impl_for_arr!(8);
impl_for_arr!(9);
impl_for_arr!(10);
impl_for_arr!(11);
impl_for_arr!(12);
impl_for_arr!(13);
impl_for_arr!(14);
impl_for_arr!(15);
impl_for_arr!(16);
impl_for_arr!(17);
impl_for_arr!(18);
impl_for_arr!(19);
impl_for_arr!(20);
impl_for_arr!(21);
impl_for_arr!(22);
impl_for_arr!(23);
impl_for_arr!(24);
impl_for_arr!(25);
impl_for_arr!(26);
impl_for_arr!(27);
impl_for_arr!(28);
impl_for_arr!(29);
impl_for_arr!(30);
impl_for_arr!(31);
impl_for_arr!(32);

impl<'a, T: ?Sized> HasLength for &'a T
    where T: HasLength
{
	fn len(&self) -> usize {
		(*self).len()
	}
}


#[cfg(test)]
mod tests {
	use super::*;

	fn implemented_for<T: HasLength>(_t: T) {}

	#[test]
	fn test() {
		implemented_for("");
		implemented_for(String::from(""));
	}

}