diff --git a/src/lib.rs b/src/lib.rs index 383964d..d9a5b93 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -102,6 +102,14 @@ pub trait Vet { } } +impl Vet for [T; N] { + type VetError = T::VetError; + + fn is_valid(&self) -> Result<(), Self::VetError> { + self.iter().try_for_each(|i| i.is_valid()) + } +} + impl Vet for Option { type VetError = T::VetError; diff --git a/src/tests.rs b/src/tests.rs index a9b9f2a..a488b71 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -26,6 +26,18 @@ fn vet_type() { assert!(foo.is_valid().is_err()); } +#[test] +fn vet_array() { + let foo: [EvenUsize; 0] = []; + assert!(foo.is_valid().is_ok()); + + let foo = [EvenUsize(2), EvenUsize(4)]; + assert!(foo.is_valid().is_ok()); + + let foo = [EvenUsize(12), EvenUsize(0), EvenUsize(5)]; + assert!(foo.is_valid().is_err()); +} + #[test] fn vet_option() { let foo = None::;