diff options
Diffstat (limited to 'validator_derive/src')
| -rw-r--r-- | validator_derive/src/lib.rs | 63 | ||||
| -rw-r--r-- | validator_derive/src/lit.rs | 2 | ||||
| -rw-r--r-- | validator_derive/src/quoting.rs | 2 | ||||
| -rw-r--r-- | validator_derive/src/validation.rs | 42 |
4 files changed, 58 insertions, 51 deletions
diff --git a/validator_derive/src/lib.rs b/validator_derive/src/lib.rs index 18472a9..6f74202 100644 --- a/validator_derive/src/lib.rs +++ b/validator_derive/src/lib.rs @@ -3,9 +3,9 @@ extern crate proc_macro; use if_chain::if_chain; use quote::quote; -use syn::parse_quote; use quote::ToTokens; use std::collections::HashMap; +use syn::parse_quote; use validator::Validator; mod asserts; @@ -259,32 +259,37 @@ fn find_validators_for_field( match *meta_item { syn::NestedMeta::Meta(ref item) => match *item { // email, url, phone, credit_card, non_control_character - syn::Meta::Path(ref name) => match name.get_ident().unwrap().to_string().as_ref() { - "email" => { - assert_string_type("email", field_type); - validators.push(FieldValidation::new(Validator::Email)); - } - "url" => { - assert_string_type("url", field_type); - validators.push(FieldValidation::new(Validator::Url)); - } - #[cfg(feature = "phone")] - "phone" => { - assert_string_type("phone", field_type); - validators.push(FieldValidation::new(Validator::Phone)); - } - #[cfg(feature = "card")] - "credit_card" => { - assert_string_type("credit_card", field_type); - validators.push(FieldValidation::new(Validator::CreditCard)); - } - #[cfg(feature = "unic")] - "non_control_character" => { - assert_string_type("non_control_character", field_type); - validators.push(FieldValidation::new(Validator::NonControlCharacter)); + syn::Meta::Path(ref name) => { + match name.get_ident().unwrap().to_string().as_ref() { + "email" => { + assert_string_type("email", field_type); + validators.push(FieldValidation::new(Validator::Email)); + } + "url" => { + assert_string_type("url", field_type); + validators.push(FieldValidation::new(Validator::Url)); + } + #[cfg(feature = "phone")] + "phone" => { + assert_string_type("phone", field_type); + validators.push(FieldValidation::new(Validator::Phone)); + } + #[cfg(feature = "card")] + "credit_card" => { + assert_string_type("credit_card", field_type); + validators + .push(FieldValidation::new(Validator::CreditCard)); + } + #[cfg(feature = "unic")] + "non_control_character" => { + assert_string_type("non_control_character", field_type); + validators.push(FieldValidation::new( + Validator::NonControlCharacter, + )); + } + _ => panic!("Unexpected validator: {:?}", name.get_ident()), } - _ => panic!("Unexpected validator: {:?}", name.get_ident()), - }, + } // custom, contains, must_match, regex syn::Meta::NameValue(syn::MetaNameValue { ref path, ref lit, .. @@ -340,7 +345,11 @@ fn find_validators_for_field( &meta_items, )); } - "email" | "url" | "phone" | "credit_card" | "non_control_character" => { + "email" + | "url" + | "phone" + | "credit_card" + | "non_control_character" => { validators.push(extract_argless_validation( ident.to_string(), rust_ident.clone(), diff --git a/validator_derive/src/lit.rs b/validator_derive/src/lit.rs index f5a9386..f11cdd6 100644 --- a/validator_derive/src/lit.rs +++ b/validator_derive/src/lit.rs @@ -1,6 +1,6 @@ use proc_macro2; -use syn; use quote::quote; +use syn; pub fn lit_to_string(lit: &syn::Lit) -> Option<String> { match *lit { diff --git a/validator_derive/src/quoting.rs b/validator_derive/src/quoting.rs index 0ba6af2..dc466ac 100644 --- a/validator_derive/src/quoting.rs +++ b/validator_derive/src/quoting.rs @@ -1,7 +1,7 @@ use proc_macro2::{self, Span}; +use quote::quote; use syn; use validator::Validator; -use quote::quote; use crate::asserts::{COW_TYPE, NUMBER_TYPES}; use crate::lit::{option_f64_to_tokens, option_u64_to_tokens}; diff --git a/validator_derive/src/validation.rs b/validator_derive/src/validation.rs index 37a2d5a..f0657ef 100644 --- a/validator_derive/src/validation.rs +++ b/validator_derive/src/validation.rs @@ -42,8 +42,8 @@ pub fn extract_length_validation( for meta_item in meta_items { if let syn::NestedMeta::Meta(ref item) = *meta_item { if let syn::Meta::NameValue(syn::MetaNameValue { ref path, ref lit, .. }) = *item { - let ident = path.get_ident().unwrap(); - match ident.to_string().as_ref() { + let ident = path.get_ident().unwrap(); + match ident.to_string().as_ref() { "message" | "code" => continue, "min" => { min = match lit_to_int(lit) { @@ -160,15 +160,15 @@ pub fn extract_argless_validation( match *meta_item { syn::NestedMeta::Meta(ref item) => match *item { syn::Meta::NameValue(syn::MetaNameValue { ref path, .. }) => { - let ident = path.get_ident().unwrap(); - match ident.to_string().as_ref() { - "message" | "code" => continue, - v => panic!( - "Unknown argument `{}` for validator `{}` on field `{}`", - v, validator_name, field - ), - } + let ident = path.get_ident().unwrap(); + match ident.to_string().as_ref() { + "message" | "code" => continue, + v => panic!( + "Unknown argument `{}` for validator `{}` on field `{}`", + v, validator_name, field + ), } + } _ => panic!("unexpected item {:?} while parsing `range` validator", item), }, _ => unreachable!(), @@ -207,7 +207,6 @@ pub fn extract_one_arg_validation( match *meta_item { syn::NestedMeta::Meta(ref item) => match *item { syn::Meta::NameValue(syn::MetaNameValue { ref path, ref lit, .. }) => { - let ident = path.get_ident().unwrap(); match ident.to_string().as_ref() { "message" | "code" => continue, @@ -269,29 +268,28 @@ fn extract_message_and_code( .. })) = *meta_item { - let ident = path.get_ident().unwrap(); - match ident.to_string().as_ref() { - "code" => { - code = match lit_to_string(lit) { + let ident = path.get_ident().unwrap(); + match ident.to_string().as_ref() { + "code" => { + code = match lit_to_string(lit) { Some(s) => Some(s), None => panic!( "Invalid argument type for `code` for validator `{}` on field `{}`: only a string is allowed", validator_name, field ), }; - } - "message" => { - message = match lit_to_string(lit) { + } + "message" => { + message = match lit_to_string(lit) { Some(s) => Some(s), None => panic!( "Invalid argument type for `message` for validator `{}` on field `{}`: only a string is allowed", validator_name, field ), }; - } - _ => continue, - } - + } + _ => continue, + } } } |
