diff options
| author | Bastien Orivel | 2018-06-20 08:20:42 +0200 | 
|---|---|---|
| committer | Bastien Orivel | 2018-06-20 08:20:42 +0200 | 
| commit | e5ec5504890b47a7df3b032361ff37f9ca369e22 (patch) | |
| tree | 72d23adfa7d895da64928c210a95bea3b1b4e4de | |
| parent | b6a23b500cf69f312dcd031900fb369176a49429 (diff) | |
| download | validator-e5ec5504890b47a7df3b032361ff37f9ca369e22.tar.bz2 | |
Update syn, quote and bump version
| -rw-r--r-- | validator_derive/Cargo.toml | 7 | ||||
| -rw-r--r-- | validator_derive/src/lib.rs | 17 | ||||
| -rw-r--r-- | validator_derive/src/lit.rs | 4 | ||||
| -rw-r--r-- | validator_derive/src/quoting.rs | 38 | ||||
| -rw-r--r-- | validator_derive/src/validation.rs | 10 | 
5 files changed, 39 insertions, 37 deletions
| diff --git a/validator_derive/Cargo.toml b/validator_derive/Cargo.toml index 717a838..3e80bbc 100644 --- a/validator_derive/Cargo.toml +++ b/validator_derive/Cargo.toml @@ -1,6 +1,6 @@  [package]  name = "validator_derive" -version = "0.7.0" +version = "0.7.1"  authors = ["Vincent Prouillet <vincent@wearewizards.io>"]  license = "MIT"  description = "Macros 1.1 implementation of #[derive(Validate)]" @@ -16,8 +16,9 @@ phone = ["validator/phone"]  card = ["validator/card"]  [dependencies] -syn = { version = "0.13", features = ["extra-traits"] } -quote = "0.5" +syn = { version = "0.14", features = ["extra-traits"] } +quote = "0.6" +proc-macro2 = "0.4"  if_chain = "0"  validator = { version = "0.7", path = "../validator"} diff --git a/validator_derive/src/lib.rs b/validator_derive/src/lib.rs index d05e5f5..b148ca1 100644 --- a/validator_derive/src/lib.rs +++ b/validator_derive/src/lib.rs @@ -3,6 +3,7 @@  #[macro_use]  extern crate quote;  extern crate proc_macro; +extern crate proc_macro2;  #[macro_use]  extern crate syn;  #[macro_use] @@ -37,7 +38,7 @@ pub fn derive_validation(input: TokenStream) -> TokenStream {  } -fn impl_validate(ast: &syn::DeriveInput) -> quote::Tokens { +fn impl_validate(ast: &syn::DeriveInput) -> proc_macro2::TokenStream {      // Ensure the macro is on a struct with named fields      let fields = match ast.data {          syn::Data::Struct(syn::DataStruct { ref fields, .. }) => { @@ -110,7 +111,7 @@ fn find_struct_validation(struct_attrs: &Vec<syn::Attribute>) -> Option<SchemaVa              if let &syn::Meta::List(syn::MetaList { ref ident, ref nested, .. }) = item;              then { -                if ident.as_ref() != "schema" { +                if ident != "schema" {                      error("Only `schema` is allowed as validator on a struct")                  } @@ -125,7 +126,7 @@ fn find_struct_validation(struct_attrs: &Vec<syn::Attribute>) -> Option<SchemaVa                          if let syn::Meta::NameValue(syn::MetaNameValue { ref ident, ref lit, .. }) = *item;                          then { -                            match ident.as_ref() { +                            match ident.to_string().as_ref() {                                  "function" => {                                      function = match lit_to_string(lit) {                                          Some(s) => s, @@ -193,13 +194,13 @@ fn find_fields_type(fields: &Vec<syn::Field>) -> HashMap<String, String> {          let field_ident = field.ident.clone().unwrap().to_string();          let field_type = match field.ty {              syn::Type::Path(syn::TypePath { ref path, .. }) => { -                let mut tokens = quote::Tokens::new(); +                let mut tokens = proc_macro2::TokenStream::empty();                  path.to_tokens(&mut tokens);                  tokens.to_string().replace(' ', "")              },              syn::Type::Reference(syn::TypeReference { ref lifetime, ref elem, .. }) => { -                let mut tokens = quote::Tokens::new(); +                let mut tokens = proc_macro2::TokenStream::empty();                  elem.to_tokens(&mut tokens);                  let mut name = tokens.to_string().replace(' ', "");                  if lifetime.is_some() { @@ -280,7 +281,7 @@ fn find_validators_for_field(field: &syn::Field, field_types: &HashMap<String, S                              },                              // custom, contains, must_match, regex                              syn::Meta::NameValue(syn::MetaNameValue { ref ident, ref lit, .. }) => { -                                match ident.as_ref() { +                                match ident.to_string().as_ref() {                                      "custom" => {                                          match lit_to_string(lit) {                                              Some(s) => validators.push(FieldValidation::new(Validator::Custom(s))), @@ -314,7 +315,7 @@ fn find_validators_for_field(field: &syn::Field, field_types: &HashMap<String, S                              // Validators with several args                              syn::Meta::List(syn::MetaList { ref ident, ref nested, .. }) => {                                  let meta_items = nested.iter().cloned().collect(); -                                match ident.as_ref() { +                                match ident.to_string().as_ref() {                                      "length" => {                                          assert_has_len(rust_ident.clone(), field_type);                                          validators.push(extract_length_validation(rust_ident.clone(), &meta_items)); @@ -374,7 +375,7 @@ fn find_original_field_name(meta_items: &Vec<&syn::NestedMeta>) -> Option<String              &syn::NestedMeta::Meta(ref item) => match *item {                  syn::Meta::Word(_) => continue,                  syn::Meta::NameValue(syn::MetaNameValue { ref ident, ref lit, .. }) => { -                    if ident.as_ref() == "rename" { +                    if ident == "rename" {                          original_name = Some(lit_to_string(lit).unwrap());                      }                  }, diff --git a/validator_derive/src/lit.rs b/validator_derive/src/lit.rs index 839b62d..1864d8f 100644 --- a/validator_derive/src/lit.rs +++ b/validator_derive/src/lit.rs @@ -1,5 +1,5 @@ -use quote;  use syn; +use proc_macro2;  pub fn lit_to_string(lit: &syn::Lit) -> Option<String> { @@ -37,7 +37,7 @@ pub fn lit_to_bool(lit: &syn::Lit) -> Option<bool> {      }  } -pub fn option_u64_to_tokens(opt: Option<u64>) -> quote::Tokens { +pub fn option_u64_to_tokens(opt: Option<u64>) -> proc_macro2::TokenStream {      match opt {          Some(ref t) => quote!(::std::option::Option::Some(#t)),          None => quote!(::std::option::Option::None) diff --git a/validator_derive/src/quoting.rs b/validator_derive/src/quoting.rs index c78fd14..272226e 100644 --- a/validator_derive/src/quoting.rs +++ b/validator_derive/src/quoting.rs @@ -1,6 +1,6 @@ -use quote;  use validator::Validator;  use syn; +use proc_macro2::{self, Span};  use lit::option_u64_to_tokens;  use validation::{FieldValidation, SchemaValidation}; @@ -26,7 +26,7 @@ impl FieldQuoter {      /// a reference to the validator      /// Also just use the ident without if it's optional and will go through      /// a if let first -    pub fn quote_validator_param(&self) -> quote::Tokens { +    pub fn quote_validator_param(&self) -> proc_macro2::TokenStream {          let ident = &self.ident;          if self._type.starts_with("Option<") { @@ -38,7 +38,7 @@ impl FieldQuoter {          }      } -    pub fn get_optional_validator_param(&self) -> quote::Tokens { +    pub fn get_optional_validator_param(&self) -> proc_macro2::TokenStream {          let ident = &self.ident;          if self._type.starts_with("Option<&") || self._type.starts_with("Option<Option<&")              || NUMBER_TYPES.contains(&self._type.as_ref()) { @@ -50,7 +50,7 @@ impl FieldQuoter {      /// Wrap the quoted output of a validation with a if let Some if      /// the field type is an option -    pub fn wrap_if_option(&self, tokens: quote::Tokens) -> quote::Tokens { +    pub fn wrap_if_option(&self, tokens: proc_macro2::TokenStream) -> proc_macro2::TokenStream {          let field_ident = &self.ident;          let optional_pattern_matched = self.get_optional_validator_param();          if self._type.starts_with("Option<Option<") { @@ -72,7 +72,7 @@ impl FieldQuoter {  }  /// Quote an actual end-user error creation automatically -fn quote_error(validation: &FieldValidation) -> quote::Tokens { +fn quote_error(validation: &FieldValidation) -> proc_macro2::TokenStream {      let code = &validation.code;      let add_message_quoted = if let Some(ref m) = validation.message {          quote!(err.message = Some(::std::borrow::Cow::from(#m));) @@ -87,7 +87,7 @@ fn quote_error(validation: &FieldValidation) -> quote::Tokens {  } -pub fn quote_length_validation(field_quoter: &FieldQuoter, validation: &FieldValidation) -> quote::Tokens { +pub fn quote_length_validation(field_quoter: &FieldQuoter, validation: &FieldValidation) -> proc_macro2::TokenStream {      let field_name = &field_quoter.name;      let validator_param = field_quoter.quote_validator_param(); @@ -138,7 +138,7 @@ pub fn quote_length_validation(field_quoter: &FieldQuoter, validation: &FieldVal      unreachable!()  } -pub fn quote_range_validation(field_quoter: &FieldQuoter, validation: &FieldValidation) -> quote::Tokens { +pub fn quote_range_validation(field_quoter: &FieldQuoter, validation: &FieldValidation) -> proc_macro2::TokenStream {      let field_name = &field_quoter.name;      let quoted_ident = field_quoter.quote_validator_param(); @@ -166,7 +166,7 @@ pub fn quote_range_validation(field_quoter: &FieldQuoter, validation: &FieldVali  }  #[cfg(feature = "card")] -pub fn quote_credit_card_validation(field_quoter: &FieldQuoter, validation: &FieldValidation) -> quote::Tokens { +pub fn quote_credit_card_validation(field_quoter: &FieldQuoter, validation: &FieldValidation) -> proc_macro2::TokenStream {      let field_name = &field_quoter.name;      let validator_param = field_quoter.quote_validator_param(); @@ -183,7 +183,7 @@ pub fn quote_credit_card_validation(field_quoter: &FieldQuoter, validation: &Fie  }  #[cfg(feature = "phone")] -pub fn quote_phone_validation(field_quoter: &FieldQuoter, validation: &FieldValidation) -> quote::Tokens { +pub fn quote_phone_validation(field_quoter: &FieldQuoter, validation: &FieldValidation) -> proc_macro2::TokenStream {      let field_name = &field_quoter.name;      let validator_param = field_quoter.quote_validator_param(); @@ -199,7 +199,7 @@ pub fn quote_phone_validation(field_quoter: &FieldQuoter, validation: &FieldVali      field_quoter.wrap_if_option(quoted)  } -pub fn quote_url_validation(field_quoter: &FieldQuoter, validation: &FieldValidation) -> quote::Tokens { +pub fn quote_url_validation(field_quoter: &FieldQuoter, validation: &FieldValidation) -> proc_macro2::TokenStream {      let field_name = &field_quoter.name;      let validator_param = field_quoter.quote_validator_param(); @@ -215,7 +215,7 @@ pub fn quote_url_validation(field_quoter: &FieldQuoter, validation: &FieldValida      field_quoter.wrap_if_option(quoted)  } -pub fn quote_email_validation(field_quoter: &FieldQuoter, validation: &FieldValidation) -> quote::Tokens { +pub fn quote_email_validation(field_quoter: &FieldQuoter, validation: &FieldValidation) -> proc_macro2::TokenStream {      let field_name = &field_quoter.name;      let validator_param = field_quoter.quote_validator_param(); @@ -231,12 +231,12 @@ pub fn quote_email_validation(field_quoter: &FieldQuoter, validation: &FieldVali      field_quoter.wrap_if_option(quoted)  } -pub fn quote_must_match_validation(field_quoter: &FieldQuoter, validation: &FieldValidation) -> quote::Tokens { +pub fn quote_must_match_validation(field_quoter: &FieldQuoter, validation: &FieldValidation) -> proc_macro2::TokenStream {      let ident = &field_quoter.ident;      let field_name = &field_quoter.name;      if let Validator::MustMatch(ref other) = validation.validator { -        let other_ident = syn::Ident::from(other.clone()); +        let other_ident = syn::Ident::new(other, Span::call_site());          let quoted_error = quote_error(&validation);          let quoted = quote!(              if !::validator::validate_must_match(&self.#ident, &self.#other_ident) { @@ -253,7 +253,7 @@ pub fn quote_must_match_validation(field_quoter: &FieldQuoter, validation: &Fiel      unreachable!();  } -pub fn quote_custom_validation(field_quoter: &FieldQuoter, validation: &FieldValidation) -> quote::Tokens { +pub fn quote_custom_validation(field_quoter: &FieldQuoter, validation: &FieldValidation) -> proc_macro2::TokenStream {      let field_name = &field_quoter.name;      let validator_param = field_quoter.quote_validator_param(); @@ -282,7 +282,7 @@ pub fn quote_custom_validation(field_quoter: &FieldQuoter, validation: &FieldVal      unreachable!();  } -pub fn quote_contains_validation(field_quoter: &FieldQuoter, validation: &FieldValidation) -> quote::Tokens { +pub fn quote_contains_validation(field_quoter: &FieldQuoter, validation: &FieldValidation) -> proc_macro2::TokenStream {      let field_name = &field_quoter.name;      let validator_param = field_quoter.quote_validator_param(); @@ -303,7 +303,7 @@ pub fn quote_contains_validation(field_quoter: &FieldQuoter, validation: &FieldV      unreachable!();  } -pub fn quote_regex_validation(field_quoter: &FieldQuoter, validation: &FieldValidation) -> quote::Tokens { +pub fn quote_regex_validation(field_quoter: &FieldQuoter, validation: &FieldValidation) -> proc_macro2::TokenStream {      let field_name = &field_quoter.name;      let validator_param = field_quoter.quote_validator_param(); @@ -324,7 +324,7 @@ pub fn quote_regex_validation(field_quoter: &FieldQuoter, validation: &FieldVali      unreachable!();  } -pub fn quote_field_validation(field_quoter: &FieldQuoter, validation: &FieldValidation) -> quote::Tokens { +pub fn quote_field_validation(field_quoter: &FieldQuoter, validation: &FieldValidation) -> proc_macro2::TokenStream {      match validation.validator {          Validator::Length {..} => quote_length_validation(&field_quoter, validation),          Validator::Range {..} => quote_range_validation(&field_quoter, validation), @@ -342,9 +342,9 @@ pub fn quote_field_validation(field_quoter: &FieldQuoter, validation: &FieldVali  } -pub fn quote_schema_validation(validation: Option<SchemaValidation>) -> quote::Tokens { +pub fn quote_schema_validation(validation: Option<SchemaValidation>) -> proc_macro2::TokenStream {      if let Some(v) = validation { -        let fn_ident = syn::Ident::from(v.function); +        let fn_ident = syn::Ident::new(&v.function, Span::call_site());          let add_message_quoted = if let Some(ref m) = v.message {              quote!(err.message = Some(::std::borrow::Cow::from(#m));) diff --git a/validator_derive/src/validation.rs b/validator_derive/src/validation.rs index bd59428..227b9d9 100644 --- a/validator_derive/src/validation.rs +++ b/validator_derive/src/validation.rs @@ -45,7 +45,7 @@ pub fn extract_length_validation(field: String, meta_items: &Vec<syn::NestedMeta      for meta_item in meta_items {          if let syn::NestedMeta::Meta(ref item) = *meta_item {              if let syn::Meta::NameValue(syn::MetaNameValue { ref ident, ref lit, .. }) = *item { -                match ident.as_ref() { +                match ident.to_string().as_ref() {                      "message" | "code" => continue,                      "min" => {                          min = match lit_to_int(lit) { @@ -109,7 +109,7 @@ pub fn extract_range_validation(field: String, meta_items: &Vec<syn::NestedMeta>          match *meta_item {              syn::NestedMeta::Meta(ref item) => match *item {                  syn::Meta::NameValue(syn::MetaNameValue { ref ident, ref lit, .. }) => { -                    match ident.as_ref() { +                    match ident.to_string().as_ref() {                          "message" | "code" => continue,                          "min" => {                              min = match lit_to_float(lit) { @@ -157,7 +157,7 @@ pub fn extract_argless_validation(validator_name: String, field: String, meta_it          match *meta_item {              syn::NestedMeta::Meta(ref item) => match *item {                  syn::Meta::NameValue(syn::MetaNameValue { ref ident, .. }) => { -                    match ident.as_ref() { +                    match ident.to_string().as_ref() {                          "message" | "code" => continue,                          v => panic!(                              "Unknown argument `{}` for validator `{}` on field `{}`", @@ -196,7 +196,7 @@ pub fn extract_one_arg_validation(val_name: &str, validator_name: String, field:          match *meta_item {              syn::NestedMeta::Meta(ref item) => match *item {                  syn::Meta::NameValue(syn::MetaNameValue { ref ident, ref lit, .. }) => { -                    match ident.as_ref() { +                    match ident.to_string().as_ref() {                          "message" | "code" => continue,                          v if v == val_name => {                              value = match lit_to_string(lit) { @@ -244,7 +244,7 @@ fn extract_message_and_code(validator_name: &str, field: &str, meta_items: &Vec<      for meta_item in meta_items {          if let syn::NestedMeta::Meta(syn::Meta::NameValue(syn::MetaNameValue { ref ident , ref lit, .. })) = *meta_item { -            match ident.as_ref() { +            match ident.to_string().as_ref() {                  "code" => {                      code = match lit_to_string(lit) {                          Some(s) => Some(s), | 
