@@ -208,7 +208,10 @@ extern crate quote;
208
208
use proc_macro:: TokenStream ;
209
209
use proc_macro2:: TokenStream as TokenStream2 ;
210
210
use 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
+ } ;
212
215
213
216
use crate :: generate:: { GenMode , GenParams } ;
214
217
@@ -218,10 +221,7 @@ mod generate;
218
221
#[ proc_macro_error]
219
222
pub fn getters ( input : TokenStream ) -> TokenStream {
220
223
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 ) ;
225
225
226
226
produce ( & ast, & params) . into ( )
227
227
}
@@ -230,10 +230,7 @@ pub fn getters(input: TokenStream) -> TokenStream {
230
230
#[ proc_macro_error]
231
231
pub fn clone_getters ( input : TokenStream ) -> TokenStream {
232
232
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 ) ;
237
234
238
235
produce ( & ast, & params) . into ( )
239
236
}
@@ -242,10 +239,7 @@ pub fn clone_getters(input: TokenStream) -> TokenStream {
242
239
#[ proc_macro_error]
243
240
pub fn copy_getters ( input : TokenStream ) -> TokenStream {
244
241
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 ) ;
249
243
250
244
produce ( & ast, & params) . into ( )
251
245
}
@@ -254,10 +248,7 @@ pub fn copy_getters(input: TokenStream) -> TokenStream {
254
248
#[ proc_macro_error]
255
249
pub fn mut_getters ( input : TokenStream ) -> TokenStream {
256
250
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 ) ;
261
252
262
253
produce ( & ast, & params) . into ( )
263
254
}
@@ -266,10 +257,7 @@ pub fn mut_getters(input: TokenStream) -> TokenStream {
266
257
#[ proc_macro_error]
267
258
pub fn setters ( input : TokenStream ) -> TokenStream {
268
259
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 ) ;
273
261
274
262
produce ( & ast, & params) . into ( )
275
263
}
@@ -278,27 +266,25 @@ pub fn setters(input: TokenStream) -> TokenStream {
278
266
#[ proc_macro_error]
279
267
pub fn with_setters ( input : TokenStream ) -> TokenStream {
280
268
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 ) ;
285
270
286
271
produce ( & ast, & params) . into ( )
287
272
}
288
273
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
+ }
291
279
}
292
280
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 > {
296
282
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
+ } ;
302
288
303
289
let ( last, skip, mut collected) = meta_list
304
290
. into_iter ( )
@@ -357,9 +343,9 @@ fn produce(ast: &DeriveInput, params: &GenParams) -> TokenStream2 {
357
343
let ( impl_generics, ty_generics, where_clause) = generics. split_for_impl ( ) ;
358
344
359
345
// 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 {
361
347
// Handle unary struct
362
- if matches ! ( fields, syn :: Fields :: Unnamed ( _) ) {
348
+ if matches ! ( fields, Fields :: Unnamed ( _) ) {
363
349
if fields. len ( ) != 1 {
364
350
abort_call_site ! ( "Only support unary struct!" ) ;
365
351
}
0 commit comments