1- use proc_macro2:: TokenStream as TokenStream2 ;
1+ use proc_macro2:: { Span , TokenStream as TokenStream2 } ;
2+ use syn:: spanned:: Spanned ;
23use syn:: { DeriveInput , Fields } ;
34
5+ fn err_only_supports_fieldless_enums ( span : Span ) -> syn:: Error {
6+ syn:: Error :: new ( span, "#[derive(Export)] only supports fieldless enums" )
7+ }
8+
49pub ( crate ) fn derive_export ( input : & DeriveInput ) -> syn:: Result < TokenStream2 > {
510 let derived_enum = match & input. data {
611 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 ( ) ) ) ;
1217 }
1318 } ;
1419
@@ -20,14 +25,8 @@ fn impl_export(enum_ty: &syn::Ident, data: &syn::DataEnum) -> syn::Result<TokenS
2025 let err = data
2126 . variants
2227 . 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 ( ) ) )
3130 . reduce ( |mut acc, err| {
3231 acc. combine ( err) ;
3332 acc
0 commit comments