aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md38
-rw-r--r--validator/src/types.rs5
-rw-r--r--validator_derive/src/lit.rs10
-rw-r--r--validator_derive/tests/complex.rs44
-rw-r--r--validator_derive/tests/contains.rs9
-rw-r--r--validator_derive/tests/credit_card.rs9
-rw-r--r--validator_derive/tests/custom.rs6
-rw-r--r--validator_derive/tests/email.rs9
-rw-r--r--validator_derive/tests/length.rs17
-rw-r--r--validator_derive/tests/must_match.rs9
-rw-r--r--validator_derive/tests/nested.rs32
-rw-r--r--validator_derive/tests/phone.rs9
-rw-r--r--validator_derive/tests/range.rs17
-rw-r--r--validator_derive/tests/regex.rs9
-rw-r--r--validator_derive/tests/schema.rs13
-rw-r--r--validator_derive/tests/url.rs11
16 files changed, 137 insertions, 110 deletions
diff --git a/README.md b/README.md
index 09d2982..f3e98d4 100644
--- a/README.md
+++ b/README.md
@@ -4,12 +4,6 @@
Macros 1.1 custom derive to simplify struct validation inspired by [marshmallow](http://marshmallow.readthedocs.io/en/latest/) and
[Django validators](https://docs.djangoproject.com/en/1.10/ref/validators/).
-It relies on the `proc_macro` feature which is stable since Rust 1.15.
-
-By default all args to a `validate` must be strings if you are using stable.
-However, if you are using nightly, you can also activate the `attr_literals` feature to be able to use int, float and boolean as well.
-
-
A short example:
```rust
@@ -31,10 +25,10 @@ struct SignupData {
phone: String,
#[validate(url)]
site: String,
- #[validate(length(min = "1"), custom = "validate_unique_username")]
+ #[validate(length(min = 1), custom = "validate_unique_username")]
#[serde(rename = "firstName")]
first_name: String,
- #[validate(range(min = "18", max = "20"))]
+ #[validate(range(min = 18, max = 20))]
age: u32,
}
@@ -117,7 +111,7 @@ struct ContactDetails {
#[derive(Debug, Validate, Deserialize)]
struct Preference {
- #[validate(length(min = "4"))]
+ #[validate(length(min = 4))]
name: String,
value: bool,
}
@@ -172,10 +166,10 @@ At least one argument is required with a maximum of 2 (having `min` and `max` at
Examples:
```rust
-#[validate(length(min = "1", max = "10"))]
-#[validate(length(min = "1"))]
-#[validate(length(max = "10"))]
-#[validate(length(equal = "10"))]
+#[validate(length(min = 1, max = 10))]
+#[validate(length(min = 1))]
+#[validate(length(max = 10))]
+#[validate(length(equal = 10))]
```
### range
@@ -184,11 +178,11 @@ Tests whether a number is in the given range. `range` takes between 1 and 2 numb
Examples:
```rust
-#[validate(range(min = "1", max = "10"))]
-#[validate(range(min = "1"))]
-#[validate(range(min = "1", max = "10.8"))]
-#[validate(range(min = "1.1", max = "10.8"))]
-#[validate(range(max = "10.8"))]
+#[validate(range(min = 1, max = 10))]
+#[validate(range(min = 1))]
+#[validate(range(min = 1, max = 10.8))]
+#[validate(range(min = 1.1, max = 10.8))]
+#[validate(range(max = 10.8))]
```
### must_match
@@ -263,7 +257,7 @@ Often, some error validation can only be applied when looking at the full struct
```rust
#[derive(Debug, Validate, Deserialize)]
-#[validate(schema(function = "validate_category", skip_on_field_errors = "false"))]
+#[validate(schema(function = "validate_category", skip_on_field_errors = false))]
struct CategoryData {
category: String,
name: String,
@@ -300,7 +294,7 @@ For example, the following attributes all work:
### validator
-#### 0.9.0 (2019/05/01)
+#### 0.9.0 (2019/05/xx)
- `ValidationErrors::errors` and `ValidationErrors::field_errors` now use `&self` instead of `self`
@@ -330,6 +324,10 @@ For example, the following attributes all work:
### validator_derive
+#### 0.9.0 (2019/05/xx)
+
+- Use literals in macros now that it's stable -> bumping minimum Rust version to 1.34
+
#### 0.8.0 (2018/09/19)
- Allow nested validation
diff --git a/validator/src/types.rs b/validator/src/types.rs
index 2d79477..f759ad7 100644
--- a/validator/src/types.rs
+++ b/validator/src/types.rs
@@ -113,6 +113,11 @@ impl ValidationErrors {
&self.0
}
+ /// Consume the struct, returning the validation errors found
+ pub fn into_errors(self) -> HashMap<&'static str, ValidationErrorsKind> {
+ self.0
+ }
+
/// Returns a map of only field-level validation errors found for the struct that was validated.
pub fn field_errors(&self) -> HashMap<&str, &Vec<ValidationError>> {
self.0
diff --git a/validator_derive/src/lit.rs b/validator_derive/src/lit.rs
index de0e21e..41deffc 100644
--- a/validator_derive/src/lit.rs
+++ b/validator_derive/src/lit.rs
@@ -11,8 +11,6 @@ pub fn lit_to_string(lit: &syn::Lit) -> Option<String> {
pub fn lit_to_int(lit: &syn::Lit) -> Option<u64> {
match *lit {
syn::Lit::Int(ref s) => Some(s.value()),
- // TODO: remove when attr_literals is stable
- syn::Lit::Str(ref s) => Some(s.value().parse::<u64>().unwrap()),
_ => None,
}
}
@@ -21,8 +19,6 @@ pub fn lit_to_float(lit: &syn::Lit) -> Option<f64> {
match *lit {
syn::Lit::Float(ref s) => Some(s.value()),
syn::Lit::Int(ref s) => Some(s.value() as f64),
- // TODO: remove when attr_literals is stable
- syn::Lit::Str(ref s) => Some(s.value().parse::<f64>().unwrap()),
_ => None,
}
}
@@ -30,12 +26,6 @@ pub fn lit_to_float(lit: &syn::Lit) -> Option<f64> {
pub fn lit_to_bool(lit: &syn::Lit) -> Option<bool> {
match *lit {
syn::Lit::Bool(ref s) => Some(s.value),
- // TODO: remove when attr_literals is stable
- syn::Lit::Str(ref s) => if s.value() == "true" {
- Some(true)
- } else {
- Some(false)
- },
_ => None,
}
}
diff --git a/validator_derive/tests/complex.rs b/validator_derive/tests/complex.rs
index 7826a49..974fdad 100644
--- a/validator_derive/tests/complex.rs
+++ b/validator_derive/tests/complex.rs
@@ -29,16 +29,16 @@ fn validate_signup(data: &SignupData) -> Result<(), ValidationError> {
}
#[derive(Debug, Validate, Deserialize)]
-#[validate(schema(function = "validate_signup", skip_on_field_errors = "false"))]
+#[validate(schema(function = "validate_signup", skip_on_field_errors = false))]
struct SignupData {
#[validate(email)]
mail: String,
#[validate(url)]
site: String,
- #[validate(length(min = "1"), custom = "validate_unique_username")]
+ #[validate(length(min = 1), custom = "validate_unique_username")]
#[serde(rename = "firstName")]
first_name: String,
- #[validate(range(min = "18", max = "20"))]
+ #[validate(range(min = 18, max = 20))]
age: u32,
#[validate]
phone: Phone,
@@ -58,13 +58,13 @@ struct Phone {
struct Card {
#[validate(credit_card)]
number: String,
- #[validate(range(min = "100", max = "9999"))]
+ #[validate(range(min = 100, max = 9999))]
cvv: u32,
}
#[derive(Debug, Validate, Deserialize)]
struct Preference {
- #[validate(length(min = "4"))]
+ #[validate(length(min = 4))]
name: String,
value: bool,
}
@@ -98,8 +98,8 @@ fn failed_validation_points_to_original_field_name() {
let res = signup.validate();
// println!("{}", serde_json::to_string(&res).unwrap());
assert!(res.is_err());
- let errs = res.unwrap_err().errors();
- assert!(errs.contains_key("firstName"));
+ let err = res.unwrap_err();
+let errs = err.errors();assert!(errs.contains_key("firstName"));
if let ValidationErrorsKind::Field(ref err) = errs["firstName"] {
assert_eq!(err.len(), 1);
assert_eq!(err[0].code, "length");
@@ -167,13 +167,13 @@ fn test_can_validate_option_fields_with_lifetime() {
#[derive(Debug, Validate)]
struct PutStruct<'a> {
- #[validate(length(min = "1", max = "10"))]
+ #[validate(length(min = 1, max = 10))]
name: Option<&'a str>,
- #[validate(length(min = "1", max = "10"))]
+ #[validate(length(min = 1, max = 10))]
address: Option<Option<&'a str>>,
- #[validate(range(min = "1", max = "100"))]
+ #[validate(range(min = 1, max = 100))]
age: Option<Option<usize>>,
- #[validate(range(min = "1", max = "10"))]
+ #[validate(range(min = 1, max = 10))]
range: Option<usize>,
#[validate(email)]
email: Option<&'a str>,
@@ -213,17 +213,17 @@ fn test_can_validate_option_fields_without_lifetime() {
#[derive(Debug, Validate)]
struct PutStruct {
- #[validate(length(min = "1", max = "10"))]
+ #[validate(length(min = 1, max = 10))]
name: Option<String>,
- #[validate(length(min = "1", max = "10"))]
+ #[validate(length(min = 1, max = 10))]
address: Option<Option<String>>,
- #[validate(length(min = "1", max = "10"))]
+ #[validate(length(min = 1, max = 10))]
ids: Option<Vec<usize>>,
- #[validate(length(min = "1", max = "10"))]
+ #[validate(length(min = 1, max = 10))]
opt_ids: Option<Option<Vec<usize>>>,
- #[validate(range(min = "1", max = "100"))]
+ #[validate(range(min = 1, max = 100))]
age: Option<Option<usize>>,
- #[validate(range(min = "1", max = "10"))]
+ #[validate(range(min = 1, max = 10))]
range: Option<usize>,
#[validate(email)]
email: Option<String>,
@@ -281,13 +281,13 @@ fn test_works_with_question_mark_operator() {
fn test_works_with_none_values() {
#[derive(Debug, Validate)]
struct PutStruct {
- #[validate(length(min = "1", max = "10"))]
+ #[validate(length(min = 1, max = 10))]
name: Option<String>,
- #[validate(length(min = "1", max = "10"))]
+ #[validate(length(min = 1, max = 10))]
address: Option<Option<String>>,
- #[validate(range(min = "1", max = "100"))]
+ #[validate(range(min = 1, max = 100))]
age: Option<Option<usize>>,
- #[validate(range(min = "1", max = "10"))]
+ #[validate(range(min = 1, max = 10))]
range: Option<usize>,
}
@@ -304,5 +304,5 @@ where
F: FnOnce(HashMap<&'static str, ValidationErrorsKind>),
{
let errors = *errors.clone();
- f(errors.errors());
+ f(errors.errors().clone());
}
diff --git a/validator_derive/tests/contains.rs b/validator_derive/tests/contains.rs
index 1fd568d..77880a5 100644
--- a/validator_derive/tests/contains.rs
+++ b/validator_derive/tests/contains.rs
@@ -28,7 +28,8 @@ fn value_not_containing_needle_fails_validation() {
let s = TestStruct { val: String::new() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].code, "contains");
@@ -46,7 +47,8 @@ fn can_specify_code_for_contains() {
let s = TestStruct { val: String::new() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].code, "oops");
@@ -62,7 +64,8 @@ fn can_specify_message_for_contains() {
let s = TestStruct { val: String::new() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].clone().message.unwrap(), "oops");
diff --git a/validator_derive/tests/credit_card.rs b/validator_derive/tests/credit_card.rs
index d212c48..ca84657 100644
--- a/validator_derive/tests/credit_card.rs
+++ b/validator_derive/tests/credit_card.rs
@@ -30,7 +30,8 @@ fn bad_credit_card_fails_validation() {
let s = TestStruct { val: "bob".to_string() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].code, "credit_card");
@@ -48,7 +49,8 @@ fn can_specify_code_for_credit_card() {
let s = TestStruct { val: "bob".to_string() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].code, "oops");
@@ -65,7 +67,8 @@ fn can_specify_message_for_credit_card() {
let s = TestStruct { val: "bob".to_string() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].clone().message.unwrap(), "oops");
diff --git a/validator_derive/tests/custom.rs b/validator_derive/tests/custom.rs
index c13853d..d39cbbe 100644
--- a/validator_derive/tests/custom.rs
+++ b/validator_derive/tests/custom.rs
@@ -36,7 +36,8 @@ fn can_fail_custom_fn_validation() {
let s = TestStruct { val: String::new() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].code, "meh");
@@ -53,7 +54,8 @@ fn can_specify_message_for_custom_fn() {
let s = TestStruct { val: String::new() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].clone().message.unwrap(), "oops");
diff --git a/validator_derive/tests/email.rs b/validator_derive/tests/email.rs
index 665f0da..3c3f499 100644
--- a/validator_derive/tests/email.rs
+++ b/validator_derive/tests/email.rs
@@ -28,7 +28,8 @@ fn bad_email_fails_validation() {
let s = TestStruct { val: "bob".to_string() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].code, "email");
@@ -45,7 +46,8 @@ fn can_specify_code_for_email() {
let s = TestStruct { val: "bob".to_string() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].code, "oops");
@@ -61,7 +63,8 @@ fn can_specify_message_for_email() {
let s = TestStruct { val: "bob".to_string() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].clone().message.unwrap(), "oops");
diff --git a/validator_derive/tests/length.rs b/validator_derive/tests/length.rs
index 6ad6272..df4a87c 100644
--- a/validator_derive/tests/length.rs
+++ b/validator_derive/tests/length.rs
@@ -8,7 +8,7 @@ use validator::Validate;
fn can_validate_length_ok() {
#[derive(Debug, Validate)]
struct TestStruct {
- #[validate(length(min = "5", max = "10"))]
+ #[validate(length(min = 5, max = 10))]
val: String,
}
@@ -21,14 +21,15 @@ fn can_validate_length_ok() {
fn value_out_of_length_fails_validation() {
#[derive(Debug, Validate)]
struct TestStruct {
- #[validate(length(min = "5", max = "10"))]
+ #[validate(length(min = 5, max = 10))]
val: String,
}
let s = TestStruct { val: String::new() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].code, "length");
@@ -41,13 +42,14 @@ fn value_out_of_length_fails_validation() {
fn can_specify_code_for_length() {
#[derive(Debug, Validate)]
struct TestStruct {
- #[validate(length(min = "5", max = "10", code = "oops"))]
+ #[validate(length(min = 5, max = 10, code = "oops"))]
val: String,
}
let s = TestStruct { val: String::new() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].code, "oops");
@@ -57,13 +59,14 @@ fn can_specify_code_for_length() {
fn can_specify_message_for_length() {
#[derive(Debug, Validate)]
struct TestStruct {
- #[validate(length(min = "5", max = "10", message = "oops"))]
+ #[validate(length(min = 5, max = 10, message = "oops"))]
val: String,
}
let s = TestStruct { val: String::new() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].clone().message.unwrap(), "oops");
diff --git a/validator_derive/tests/must_match.rs b/validator_derive/tests/must_match.rs
index 32b3016..9b7bb10 100644
--- a/validator_derive/tests/must_match.rs
+++ b/validator_derive/tests/must_match.rs
@@ -31,7 +31,8 @@ fn not_matching_fails_validation() {
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].code, "must_match");
@@ -50,7 +51,8 @@ fn can_specify_code_for_must_match() {
let s = TestStruct { val: "bob".to_string(), val2: "bobb".to_string() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].code, "oops");
@@ -67,7 +69,8 @@ fn can_specify_message_for_must_match() {
let s = TestStruct { val: "bob".to_string(), val2: "bobb".to_string() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].clone().message.unwrap(), "oops");
diff --git a/validator_derive/tests/nested.rs b/validator_derive/tests/nested.rs
index a95b0ef..9e3e57f 100644
--- a/validator_derive/tests/nested.rs
+++ b/validator_derive/tests/nested.rs
@@ -11,7 +11,7 @@ use validator::{
#[derive(Debug, Validate)]
struct Root<'a> {
- #[validate(length(min = "1"))]
+ #[validate(length(min = 1))]
value: String,
#[validate]
@@ -20,7 +20,7 @@ struct Root<'a> {
#[derive(Debug, Validate)]
struct A {
- #[validate(length(min = "1"))]
+ #[validate(length(min = 1))]
value: String,
#[validate]
@@ -29,7 +29,7 @@ struct A {
#[derive(Debug, Validate)]
struct B {
- #[validate(length(min = "1"))]
+ #[validate(length(min = 1))]
value: String,
}
@@ -42,13 +42,13 @@ struct ParentWithOptionalChild {
#[derive(Debug, Validate)]
struct ParentWithVectorOfChildren {
#[validate]
- #[validate(length(min = "1"))]
+ #[validate(length(min = 1))]
child: Vec<Child>,
}
#[derive(Debug, Validate, Serialize)]
struct Child {
- #[validate(length(min = "1"))]
+ #[validate(length(min = 1))]
value: String,
}
@@ -71,8 +71,8 @@ fn failed_validation_points_to_original_field_names() {
let res = root.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().errors();
- assert_eq!(errs.len(), 2);
+ let err = res.unwrap_err();
+let errs = err.errors();assert_eq!(errs.len(), 2);
assert!(errs.contains_key("value"));
if let ValidationErrorsKind::Field(ref errs) = errs["value"] {
assert_eq!(errs.len(), 1);
@@ -118,8 +118,8 @@ fn test_can_validate_option_fields_without_lifetime() {
let res = instance.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().errors();
- assert_eq!(errs.len(), 1);
+ let err = res.unwrap_err();
+let errs = err.errors();assert_eq!(errs.len(), 1);
assert!(errs.contains_key("child"));
if let ValidationErrorsKind::Struct(ref errs) = errs["child"] {
unwrap_map(errs, |errs| {
@@ -151,8 +151,8 @@ fn test_can_validate_option_fields_with_lifetime() {
let res = instance.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().errors();
- assert_eq!(errs.len(), 1);
+ let err = res.unwrap_err();
+let errs = err.errors();assert_eq!(errs.len(), 1);
assert!(errs.contains_key("child"));
if let ValidationErrorsKind::Struct(ref errs) = errs["child"] {
unwrap_map(errs, |errs| {
@@ -191,8 +191,8 @@ fn test_can_validate_vector_fields() {
let res = instance.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().errors();
- assert_eq!(errs.len(), 1);
+ let err = res.unwrap_err();
+let errs = err.errors();assert_eq!(errs.len(), 1);
assert!(errs.contains_key("child"));
if let ValidationErrorsKind::List(ref errs) = errs["child"] {
assert!(errs.contains_key(&1));
@@ -228,8 +228,8 @@ fn test_field_validations_take_priority_over_nested_validations() {
let res = instance.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().errors();
- assert_eq!(errs.len(), 1);
+ let err = res.unwrap_err();
+let errs = err.errors();assert_eq!(errs.len(), 1);
assert!(errs.contains_key("child"));
if let ValidationErrorsKind::Field(ref errs) = errs["child"] {
assert_eq!(errs.len(), 1);
@@ -343,5 +343,5 @@ where
F: FnOnce(HashMap<&'static str, ValidationErrorsKind>),
{
let errors = *errors.clone();
- f(errors.errors());
+ f(errors.errors().clone());
}
diff --git a/validator_derive/tests/phone.rs b/validator_derive/tests/phone.rs
index a87d037..b692a8f 100644
--- a/validator_derive/tests/phone.rs
+++ b/validator_derive/tests/phone.rs
@@ -30,7 +30,8 @@ fn bad_phone_fails_validation() {
let s = TestStruct { val: "bob".to_string() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].code, "phone");
@@ -47,7 +48,8 @@ fn can_specify_code_for_phone() {
let s = TestStruct { val: "bob".to_string() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].code, "oops");
@@ -65,7 +67,8 @@ fn can_specify_message_for_phone() {
let s = TestStruct { val: "bob".to_string() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].clone().message.unwrap(), "oops");
diff --git a/validator_derive/tests/range.rs b/validator_derive/tests/range.rs
index 4f38f18..869510a 100644
--- a/validator_derive/tests/range.rs
+++ b/validator_derive/tests/range.rs
@@ -8,7 +8,7 @@ use validator::Validate;
fn can_validate_range_ok() {
#[derive(Debug, Validate)]
struct TestStruct {
- #[validate(range(min = "5", max = "10"))]
+ #[validate(range(min = 5, max = 10))]
val: usize,
}
@@ -21,14 +21,15 @@ fn can_validate_range_ok() {
fn value_out_of_range_fails_validation() {
#[derive(Debug, Validate)]
struct TestStruct {
- #[validate(range(min = "5", max = "10"))]
+ #[validate(range(min = 5, max = 10))]
val: usize,
}
let s = TestStruct { val: 11 };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].code, "range");
@@ -38,13 +39,14 @@ fn value_out_of_range_fails_validation() {
fn can_specify_code_for_range() {
#[derive(Debug, Validate)]
struct TestStruct {
- #[validate(range(min = "5", max = "10", code = "oops"))]
+ #[validate(range(min = 5, max = 10, code = "oops"))]
val: usize,
}
let s = TestStruct { val: 11 };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].code, "oops");
@@ -57,13 +59,14 @@ fn can_specify_code_for_range() {
fn can_specify_message_for_range() {
#[derive(Debug, Validate)]
struct TestStruct {
- #[validate(range(min = "5", max = "10", message = "oops"))]
+ #[validate(range(min = 5, max = 10, message = "oops"))]
val: usize,
}
let s = TestStruct { val: 1 };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].clone().message.unwrap(), "oops");
diff --git a/validator_derive/tests/regex.rs b/validator_derive/tests/regex.rs
index a6b9e68..7e3dfc5 100644
--- a/validator_derive/tests/regex.rs
+++ b/validator_derive/tests/regex.rs
@@ -36,7 +36,8 @@ fn bad_value_for_regex_fails_validation() {
let s = TestStruct { val: "2".to_string() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].code, "regex");
@@ -53,7 +54,8 @@ fn can_specify_code_for_regex() {
let s = TestStruct { val: "2".to_string() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].code, "oops");
@@ -69,7 +71,8 @@ fn can_specify_message_for_regex() {
let s = TestStruct { val: "2".to_string() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].clone().message.unwrap(), "oops");
diff --git a/validator_derive/tests/schema.rs b/validator_derive/tests/schema.rs
index b45f3a1..3a45711 100644
--- a/validator_derive/tests/schema.rs
+++ b/validator_derive/tests/schema.rs
@@ -36,7 +36,8 @@ fn can_fail_schema_fn_validation() {
let s = TestStruct { val: String::new() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("__all__"));
assert_eq!(errs["__all__"].len(), 1);
assert_eq!(errs["__all__"][0].code, "meh");
@@ -56,7 +57,8 @@ fn can_specify_message_for_schema_fn() {
let s = TestStruct { val: String::new() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("__all__"));
assert_eq!(errs["__all__"].len(), 1);
assert_eq!(errs["__all__"][0].clone().message.unwrap(), "oops");
@@ -68,10 +70,10 @@ fn can_choose_to_run_schema_validation_even_after_field_errors() {
Err(ValidationError::new("meh"))
}
#[derive(Debug, Validate)]
- #[validate(schema(function = "invalid_schema_fn", skip_on_field_errors = "false"))]
+ #[validate(schema(function = "invalid_schema_fn", skip_on_field_errors = false))]
struct TestStruct {
val: String,
- #[validate(range(min = "1", max = "10"))]
+ #[validate(range(min = 1, max = 10))]
num: usize,
}
@@ -79,7 +81,8 @@ fn can_choose_to_run_schema_validation_even_after_field_errors() {
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("__all__"));
assert_eq!(errs["__all__"].len(), 1);
assert_eq!(errs["__all__"][0].clone().code, "meh");
diff --git a/validator_derive/tests/url.rs b/validator_derive/tests/url.rs
index 0ac3cb1..3b867b9 100644
--- a/validator_derive/tests/url.rs
+++ b/validator_derive/tests/url.rs
@@ -28,7 +28,9 @@ fn bad_url_fails_validation() {
let s = TestStruct { val: "bob".to_string() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].code, "url");
@@ -44,7 +46,9 @@ fn can_specify_code_for_url() {
let s = TestStruct { val: "bob".to_string() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].code, "oops");
@@ -61,7 +65,8 @@ fn can_specify_message_for_url() {
let s = TestStruct { val: "bob".to_string() };
let res = s.validate();
assert!(res.is_err());
- let errs = res.unwrap_err().field_errors();
+ let err = res.unwrap_err();
+ let errs = err.field_errors();
assert!(errs.contains_key("val"));
assert_eq!(errs["val"].len(), 1);
assert_eq!(errs["val"][0].clone().message.unwrap(), "oops");