aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--validator/src/types.rs11
-rw-r--r--validator_derive/tests/complex.rs19
2 files changed, 29 insertions, 1 deletions
diff --git a/validator/src/types.rs b/validator/src/types.rs
index bb176c3..5c62e6d 100644
--- a/validator/src/types.rs
+++ b/validator/src/types.rs
@@ -59,3 +59,14 @@ impl ValidationErrors {
self.0.is_empty()
}
}
+
+impl std::error::Error for ValidationErrors {
+ fn description(&self) -> &str { "Validation failed" }
+ fn cause(&self) -> Option<&std::error::Error> { None }
+}
+
+impl fmt::Display for ValidationErrors {
+ fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
+ fmt::Debug::fmt(self, fmt)
+ }
+}
diff --git a/validator_derive/tests/complex.rs b/validator_derive/tests/complex.rs
index db5f1bf..0bd74fa 100644
--- a/validator_derive/tests/complex.rs
+++ b/validator_derive/tests/complex.rs
@@ -9,7 +9,7 @@ extern crate regex;
extern crate lazy_static;
use regex::Regex;
-use validator::{Validate, ValidationError};
+use validator::{Validate, ValidationError, ValidationErrors};
fn validate_unique_username(username: &str) -> Result<(), ValidationError> {
@@ -153,3 +153,20 @@ fn test_can_validate_option_fields_without_lifetime() {
};
assert!(s.validate().is_ok());
}
+
+#[test]
+fn test_works_with_question_mark_operator() {
+ fn some_fn() -> Result<(), ValidationErrors> {
+ let signup = SignupData {
+ mail: "invalid_email".to_string(),
+ site: "http://hello.com".to_string(),
+ first_name: "Bob".to_string(),
+ age: 18,
+ };
+
+ signup.validate()?;
+ Ok(())
+ }
+
+ assert!(some_fn().is_err());
+}