diff options
| -rw-r--r-- | validator/src/types.rs | 11 | ||||
| -rw-r--r-- | validator_derive/tests/complex.rs | 19 |
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()); +} |
