@@ -7,7 +7,7 @@ pub(crate) fn derive_export(input: &DeriveInput) -> syn::Result<TokenStream2> {
77 _ => {
88 return Err ( syn:: Error :: new (
99 input. ident . span ( ) ,
10- "#[derive(Export)] can only use on enum " ,
10+ "#[derive(Export)] only supports fieldless enums " ,
1111 ) )
1212 }
1313 } ;
@@ -17,23 +17,35 @@ pub(crate) fn derive_export(input: &DeriveInput) -> syn::Result<TokenStream2> {
1717}
1818
1919fn impl_export ( enum_ty : & syn:: Ident , data : & syn:: DataEnum ) -> syn:: Result < TokenStream2 > {
20- let mappings = {
21- let mut m = Vec :: with_capacity ( data . variants . len ( ) ) ;
22-
23- for variant in & data . variants {
24- if !matches ! ( variant. fields, Fields :: Unit ) {
25- return Err ( syn:: Error :: new (
20+ let err = data
21+ . variants
22+ . iter ( )
23+ . filter_map ( |variant| {
24+ ( !matches ! ( variant. fields, Fields :: Unit ) ) . then ( || {
25+ syn:: Error :: new (
2626 variant. ident . span ( ) ,
2727 "#[derive(Export)] only supports fieldless enums" ,
28- ) ) ;
29- }
28+ )
29+ } )
30+ } )
31+ . reduce ( |mut acc, err| {
32+ acc. combine ( err) ;
33+ acc
34+ } ) ;
35+ if let Some ( err) = err {
36+ return Err ( err) ;
37+ }
38+
39+ let mappings = data
40+ . variants
41+ . iter ( )
42+ . map ( |variant| {
3043 let key = & variant. ident ;
3144 let val = quote ! { #enum_ty:: #key as i64 } ;
32- m. push ( quote ! { ( stringify!( #key) . to_string( ) , #val) } ) ;
33- }
45+ quote ! { ( stringify!( #key) . to_string( ) , #val) }
46+ } )
47+ . collect :: < Vec < _ > > ( ) ;
3448
35- m
36- } ;
3749 let impl_block = quote ! {
3850 impl :: gdnative:: export:: Export for #enum_ty {
3951 type Hint = :: gdnative:: export:: hint:: IntHint <i64 >;
0 commit comments