From 713e8f4d961a37220ba864da9c3ea9dfa560372d Mon Sep 17 00:00:00 2001 From: Benjamin Herman Date: Sat, 9 Jul 2022 14:23:43 -0700 Subject: [PATCH] Implement vet for fixed size arrays --- src/lib.rs | 8 ++++++++ src/tests.rs | 12 ++++++++++++ 2 files changed, 20 insertions(+) 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::;