aboutsummaryrefslogtreecommitdiffstats
path: root/validator_derive/src
diff options
context:
space:
mode:
authorVincent Prouillet2017-11-08 17:16:24 +0100
committerVincent Prouillet2017-11-08 17:16:24 +0100
commit9b175bc3ca7a2a65add0ec4a42a79b5c9f47314b (patch)
tree0d359b1d047841e1be14aeca8e0cf157cbdd6b42 /validator_derive/src
parentf04f03f33c057e160856800bdd1a106b035d713b (diff)
downloadvalidator-9b175bc3ca7a2a65add0ec4a42a79b5c9f47314b.tar.bz2
Add missing credit_card derive impl
Diffstat (limited to 'validator_derive/src')
-rw-r--r--validator_derive/src/lib.rs6
-rw-r--r--validator_derive/src/quoting.rs17
2 files changed, 22 insertions, 1 deletions
diff --git a/validator_derive/src/lib.rs b/validator_derive/src/lib.rs
index 9cfc381..adb5515 100644
--- a/validator_derive/src/lib.rs
+++ b/validator_derive/src/lib.rs
@@ -270,6 +270,10 @@ fn find_validators_for_field(field: &syn::Field, field_types: &HashMap<String, S
assert_string_type("phone", field_type);
validators.push(FieldValidation::new(Validator::Phone));
},
+ "credit_card" => {
+ assert_string_type("credit_card", field_type);
+ validators.push(FieldValidation::new(Validator::CreditCard));
+ },
_ => panic!("Unexpected validator: {}", name)
},
// custom, contains, must_match, regex
@@ -315,7 +319,7 @@ fn find_validators_for_field(field: &syn::Field, field_types: &HashMap<String, S
assert_has_range(rust_ident.clone(), field_type);
validators.push(extract_range_validation(rust_ident.clone(), meta_items));
},
- "email" | "url" | "phone" => {
+ "email" | "url" | "phone" | "credit_card" => {
validators.push(extract_argless_validation(name.to_string(), rust_ident.clone(), meta_items));
},
"custom" => {
diff --git a/validator_derive/src/quoting.rs b/validator_derive/src/quoting.rs
index 24c50d8..7e2fe48 100644
--- a/validator_derive/src/quoting.rs
+++ b/validator_derive/src/quoting.rs
@@ -158,6 +158,22 @@ pub fn quote_range_validation(field_quoter: &FieldQuoter, validation: &FieldVali
unreachable!()
}
+pub fn quote_credit_card_validation(field_quoter: &FieldQuoter, validation: &FieldValidation) -> quote::Tokens {
+ let field_name = &field_quoter.name;
+ let validator_param = field_quoter.quote_validator_param();
+
+ let quoted_error = quote_error(&validation);
+ let quoted = quote!(
+ if !::validator::validate_credit_card(#validator_param) {
+ #quoted_error
+ err.add_param(::std::borrow::Cow::from("value"), &#validator_param);
+ errors.add(#field_name, err);
+ }
+ );
+
+ field_quoter.wrap_if_option(quoted)
+}
+
pub fn quote_phone_validation(field_quoter: &FieldQuoter, validation: &FieldValidation) -> quote::Tokens {
let field_name = &field_quoter.name;
let validator_param = field_quoter.quote_validator_param();
@@ -309,6 +325,7 @@ pub fn quote_field_validation(field_quoter: &FieldQuoter, validation: &FieldVali
Validator::Custom(_) => quote_custom_validation(&field_quoter, validation),
Validator::Contains(_) => quote_contains_validation(&field_quoter, validation),
Validator::Regex(_) => quote_regex_validation(&field_quoter, validation),
+ Validator::CreditCard => quote_credit_card_validation(&field_quoter, validation),
Validator::Phone => quote_phone_validation(&field_quoter, validation),
}
}