1
- use proc_macro2:: TokenStream as TokenStream2 ;
1
+ use proc_macro2:: { Span , TokenStream as TokenStream2 } ;
2
+ use syn:: spanned:: Spanned ;
2
3
use syn:: { DeriveInput , Fields } ;
3
4
5
+ fn err_only_supports_fieldless_enums ( span : Span ) -> syn:: Error {
6
+ syn:: Error :: new ( span, "#[derive(Export)] only supports fieldless enums" )
7
+ }
8
+
4
9
pub ( crate ) fn derive_export ( input : & DeriveInput ) -> syn:: Result < TokenStream2 > {
5
10
let derived_enum = match & input. data {
6
11
syn:: Data :: Enum ( data) => data,
7
- _ => {
8
- return Err ( syn :: Error :: new (
9
- input . ident . span ( ) ,
10
- "#[derive(Export)] only supports fieldless enums" ,
11
- ) )
12
+ syn :: Data :: Struct ( data ) => {
13
+ return Err ( err_only_supports_fieldless_enums ( data . struct_token . span ( ) ) ) ;
14
+ }
15
+ syn :: Data :: Union ( data ) => {
16
+ return Err ( err_only_supports_fieldless_enums ( data . union_token . span ( ) ) ) ;
12
17
}
13
18
} ;
14
19
@@ -20,14 +25,8 @@ fn impl_export(enum_ty: &syn::Ident, data: &syn::DataEnum) -> syn::Result<TokenS
20
25
let err = data
21
26
. variants
22
27
. iter ( )
23
- . filter_map ( |variant| {
24
- ( !matches ! ( variant. fields, Fields :: Unit ) ) . then ( || {
25
- syn:: Error :: new (
26
- variant. ident . span ( ) ,
27
- "#[derive(Export)] only supports fieldless enums" ,
28
- )
29
- } )
30
- } )
28
+ . filter ( |variant| !matches ! ( variant. fields, Fields :: Unit ) )
29
+ . map ( |variant| err_only_supports_fieldless_enums ( variant. ident . span ( ) ) )
31
30
. reduce ( |mut acc, err| {
32
31
acc. combine ( err) ;
33
32
acc
0 commit comments