diff options
| -rw-r--r-- | README.md | 10 | ||||
| -rw-r--r-- | validator/Cargo.toml | 1 | ||||
| -rw-r--r-- | validator/src/lib.rs | 2 | ||||
| -rw-r--r-- | validator/src/validation/cards.rs | 24 | ||||
| -rw-r--r-- | validator/src/validation/mod.rs | 3 | 
5 files changed, 40 insertions, 0 deletions
| @@ -151,6 +151,16 @@ Examples:  #[validate(regex = "ALLOWED_USERNAMES_RE"))]  ``` +### credit\_card +Test whetever the string is a valid credit card number. To use this validator, +you must enable the `credit_cards` feature for the `validator` crate. + +Examples: + +```rust +#[validate(credit_card)] +``` +  ### custom  Calls one of your function to do a custom validation.   The field will be given as parameter and it should return a `Option<String>` representing the error code, diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 7cad55b..b138982 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -16,3 +16,4 @@ idna = "0.1"  serde = "1"  serde_derive = "1"  serde_json = "1" +card-validate = "2.1" diff --git a/validator/src/lib.rs b/validator/src/lib.rs index 35afbe4..9bdb716 100644 --- a/validator/src/lib.rs +++ b/validator/src/lib.rs @@ -7,6 +7,7 @@ extern crate serde;  extern crate serde_json;  #[macro_use]  extern crate serde_derive; +extern crate card_validate;  mod types;  mod validation; @@ -19,6 +20,7 @@ pub use validation::range::{validate_range};  pub use validation::urls::{validate_url};  pub use validation::must_match::{validate_must_match};  pub use validation::contains::{validate_contains}; +pub use validation::cards::{validate_credit_card};  pub use validation::Validator;  pub use types::{ValidationErrors, ValidationError}; diff --git a/validator/src/validation/cards.rs b/validator/src/validation/cards.rs new file mode 100644 index 0000000..b72663d --- /dev/null +++ b/validator/src/validation/cards.rs @@ -0,0 +1,24 @@ +use card_validate::{Validate as CardValidate}; + + +pub fn validate_credit_card(card: &str) -> bool { +    CardValidate::from(card).is_ok() +} + +#[cfg(test)] +mod tests { +    use super::validate_credit_card; +    #[test] +    fn test_credit_card() { +        let tests = vec![ +            ("4539571147647251", true), +            ("343380440754432", true), +            ("zduhefljsdfKJKJZHUI", false), +            ("5236313877109141", false), +        ]; + +        for (input, expected) in tests { +            assert_eq!(validate_credit_card(input), expected); +        } +    } +} diff --git a/validator/src/validation/mod.rs b/validator/src/validation/mod.rs index 939cacf..b7d9a1d 100644 --- a/validator/src/validation/mod.rs +++ b/validator/src/validation/mod.rs @@ -5,6 +5,7 @@ pub mod range;  pub mod urls;  pub mod must_match;  pub mod contains; +pub mod cards;  /// Contains all the validators that can be used  /// @@ -32,6 +33,7 @@ pub enum Validator {          max: Option<u64>,          equal: Option<u64>,      }, +    CreditCard(String),  }  impl Validator { @@ -45,6 +47,7 @@ impl Validator {              Validator::Regex(_) => "regex",              Validator::Range {..} => "range",              Validator::Length {..} => "length", +            Validator::CreditCard(_) => "credit_card",          }      }  } | 
