@@ -208,7 +208,10 @@ extern crate quote;
208208use proc_macro:: TokenStream ;
209209use proc_macro2:: TokenStream as TokenStream2 ;
210210use proc_macro_error2:: { abort, abort_call_site, proc_macro_error} ;
211- use syn:: { parse_macro_input, spanned:: Spanned , DataStruct , DeriveInput , Meta } ;
211+ use syn:: {
212+ parse_macro_input, punctuated:: Punctuated , spanned:: Spanned , Attribute , Data , DataStruct ,
213+ DeriveInput , Fields , Meta , Token ,
214+ } ;
212215
213216use crate :: generate:: { GenMode , GenParams } ;
214217
@@ -218,10 +221,7 @@ mod generate;
218221#[ proc_macro_error]
219222pub fn getters ( input : TokenStream ) -> TokenStream {
220223 let ast = parse_macro_input ! ( input as DeriveInput ) ;
221- let params = GenParams {
222- mode : GenMode :: Get ,
223- global_attr : parse_global_attr ( & ast. attrs , GenMode :: Get ) ,
224- } ;
224+ let params = make_params ( & ast. attrs , GenMode :: Get ) ;
225225
226226 produce ( & ast, & params) . into ( )
227227}
@@ -230,10 +230,7 @@ pub fn getters(input: TokenStream) -> TokenStream {
230230#[ proc_macro_error]
231231pub fn clone_getters ( input : TokenStream ) -> TokenStream {
232232 let ast = parse_macro_input ! ( input as DeriveInput ) ;
233- let params = GenParams {
234- mode : GenMode :: GetClone ,
235- global_attr : parse_global_attr ( & ast. attrs , GenMode :: GetClone ) ,
236- } ;
233+ let params = make_params ( & ast. attrs , GenMode :: GetClone ) ;
237234
238235 produce ( & ast, & params) . into ( )
239236}
@@ -242,10 +239,7 @@ pub fn clone_getters(input: TokenStream) -> TokenStream {
242239#[ proc_macro_error]
243240pub fn copy_getters ( input : TokenStream ) -> TokenStream {
244241 let ast = parse_macro_input ! ( input as DeriveInput ) ;
245- let params = GenParams {
246- mode : GenMode :: GetCopy ,
247- global_attr : parse_global_attr ( & ast. attrs , GenMode :: GetCopy ) ,
248- } ;
242+ let params = make_params ( & ast. attrs , GenMode :: GetCopy ) ;
249243
250244 produce ( & ast, & params) . into ( )
251245}
@@ -254,10 +248,7 @@ pub fn copy_getters(input: TokenStream) -> TokenStream {
254248#[ proc_macro_error]
255249pub fn mut_getters ( input : TokenStream ) -> TokenStream {
256250 let ast = parse_macro_input ! ( input as DeriveInput ) ;
257- let params = GenParams {
258- mode : GenMode :: GetMut ,
259- global_attr : parse_global_attr ( & ast. attrs , GenMode :: GetMut ) ,
260- } ;
251+ let params = make_params ( & ast. attrs , GenMode :: GetMut ) ;
261252
262253 produce ( & ast, & params) . into ( )
263254}
@@ -266,10 +257,7 @@ pub fn mut_getters(input: TokenStream) -> TokenStream {
266257#[ proc_macro_error]
267258pub fn setters ( input : TokenStream ) -> TokenStream {
268259 let ast = parse_macro_input ! ( input as DeriveInput ) ;
269- let params = GenParams {
270- mode : GenMode :: Set ,
271- global_attr : parse_global_attr ( & ast. attrs , GenMode :: Set ) ,
272- } ;
260+ let params = make_params ( & ast. attrs , GenMode :: Set ) ;
273261
274262 produce ( & ast, & params) . into ( )
275263}
@@ -278,27 +266,25 @@ pub fn setters(input: TokenStream) -> TokenStream {
278266#[ proc_macro_error]
279267pub fn with_setters ( input : TokenStream ) -> TokenStream {
280268 let ast = parse_macro_input ! ( input as DeriveInput ) ;
281- let params = GenParams {
282- mode : GenMode :: SetWith ,
283- global_attr : parse_global_attr ( & ast. attrs , GenMode :: SetWith ) ,
284- } ;
269+ let params = make_params ( & ast. attrs , GenMode :: SetWith ) ;
285270
286271 produce ( & ast, & params) . into ( )
287272}
288273
289- fn parse_global_attr ( attrs : & [ syn:: Attribute ] , mode : GenMode ) -> Option < Meta > {
290- attrs. iter ( ) . filter_map ( |v| parse_attr ( v, mode) ) . last ( )
274+ fn make_params ( attrs : & [ Attribute ] , mode : GenMode ) -> GenParams {
275+ GenParams {
276+ mode,
277+ global_attr : attrs. iter ( ) . filter_map ( |v| parse_attr ( v, mode) ) . last ( ) ,
278+ }
291279}
292280
293- fn parse_attr ( attr : & syn:: Attribute , mode : GenMode ) -> Option < syn:: Meta > {
294- use syn:: { punctuated:: Punctuated , Token } ;
295-
281+ fn parse_attr ( attr : & Attribute , mode : GenMode ) -> Option < Meta > {
296282 if attr. path ( ) . is_ident ( "getset" ) {
297- let meta_list =
298- match attr . parse_args_with ( Punctuated :: < syn :: Meta , Token ! [ , ] > :: parse_terminated ) {
299- Ok ( list) => list,
300- Err ( e) => abort ! ( attr. span( ) , "Failed to parse getset attribute: {}" , e) ,
301- } ;
283+ let meta_list = match attr . parse_args_with ( Punctuated :: < Meta , Token ! [ , ] > :: parse_terminated )
284+ {
285+ Ok ( list) => list,
286+ Err ( e) => abort ! ( attr. span( ) , "Failed to parse getset attribute: {}" , e) ,
287+ } ;
302288
303289 let ( last, skip, mut collected) = meta_list
304290 . into_iter ( )
@@ -357,9 +343,9 @@ fn produce(ast: &DeriveInput, params: &GenParams) -> TokenStream2 {
357343 let ( impl_generics, ty_generics, where_clause) = generics. split_for_impl ( ) ;
358344
359345 // Is it a struct?
360- if let syn :: Data :: Struct ( DataStruct { ref fields, .. } ) = ast. data {
346+ if let Data :: Struct ( DataStruct { ref fields, .. } ) = ast. data {
361347 // Handle unary struct
362- if matches ! ( fields, syn :: Fields :: Unnamed ( _) ) {
348+ if matches ! ( fields, Fields :: Unnamed ( _) ) {
363349 if fields. len ( ) != 1 {
364350 abort_call_site ! ( "Only support unary struct!" ) ;
365351 }
0 commit comments