diff options
Diffstat (limited to 'validator_derive/src')
| -rw-r--r-- | validator_derive/src/lib.rs | 6 | ||||
| -rw-r--r-- | validator_derive/src/quoting.rs | 17 |
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), } } |
