aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Prouillet2020-06-09 21:29:50 +0200
committerGitHub2020-06-09 21:29:50 +0200
commite052be5fdac051d005ab0e93c1016e4e8ac4ee00 (patch)
treecc21f3b2461883c6147a267f49813545331fc6b8
parentdb4f4be938d381d4a83efbfbbcc1ac9b1a1df511 (diff)
parentf51e0d671880b32a574060c642e405c590dd0974 (diff)
downloadvalidator-e052be5fdac051d005ab0e93c1016e4e8ac4ee00.tar.bz2
Merge pull request #102 from LucasPickering/blanket-ref-impl
Add a blanket Validate implementation for references
-rw-r--r--validator/src/traits.rs6
-rw-r--r--validator_derive/tests/range.rs21
2 files changed, 26 insertions, 1 deletions
diff --git a/validator/src/traits.rs b/validator/src/traits.rs
index 61bb002..93b23fa 100644
--- a/validator/src/traits.rs
+++ b/validator/src/traits.rs
@@ -93,3 +93,9 @@ impl<'a, S, H: ::std::hash::BuildHasher> Contains for &'a HashMap<String, S, H>
pub trait Validate {
fn validate(&self) -> Result<(), ValidationErrors>;
}
+
+impl<T: Validate> Validate for &T {
+ fn validate(&self) -> Result<(), ValidationErrors> {
+ T::validate(*self)
+ }
+}
diff --git a/validator_derive/tests/range.rs b/validator_derive/tests/range.rs
index 869510a..006d085 100644
--- a/validator_derive/tests/range.rs
+++ b/validator_derive/tests/range.rs
@@ -2,7 +2,7 @@
extern crate validator_derive;
extern crate validator;
-use validator::Validate;
+use validator::{Validate, ValidationErrors};
#[test]
fn can_validate_range_ok() {
@@ -71,3 +71,22 @@ fn can_specify_message_for_range() {
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].clone().message.unwrap(), "oops");
}
+
+#[test]
+fn can_pass_reference_as_validate() {
+ // This tests that the blanket Validate implementation on
+ // `&T where T:Validate` works properly
+
+ #[derive(Validate)]
+ struct TestStruct {
+ #[validate(range(min = 100))]
+ num_field: u32,
+ }
+
+ fn validate<T: Validate>(value: T) -> Result<(), ValidationErrors> {
+ value.validate()
+ }
+
+ let val = TestStruct { num_field: 10 };
+ validate(&val).unwrap_err();
+}