Emit passthrough attrs into macro output
diff --git a/macro/src/expand.rs b/macro/src/expand.rs
index 3b03115..249afdc 100644
--- a/macro/src/expand.rs
+++ b/macro/src/expand.rs
@@ -153,13 +153,15 @@
 fn expand_struct(strct: &Struct) -> TokenStream {
     let ident = &strct.name.rust;
     let doc = &strct.doc;
+    let attrs = &strct.attrs;
     let type_id = type_id(&strct.name);
     let fields = strct.fields.iter().map(|field| {
         let doc = &field.doc;
+        let attrs = &field.attrs;
         // This span on the pub makes "private type in public interface" errors
         // appear in the right place.
         let vis = field.visibility;
-        quote!(#doc #vis #field)
+        quote!(#doc #attrs #vis #field)
     });
     let mut derives = None;
     let derived_traits = derive::expand_struct(strct, &mut derives);
@@ -175,6 +177,7 @@
 
     quote! {
         #doc
+        #attrs
         #derives
         #[repr(C)]
         #struct_def
@@ -285,14 +288,17 @@
 fn expand_enum(enm: &Enum) -> TokenStream {
     let ident = &enm.name.rust;
     let doc = &enm.doc;
+    let attrs = &enm.attrs;
     let repr = enm.repr;
     let type_id = type_id(&enm.name);
     let variants = enm.variants.iter().map(|variant| {
         let doc = &variant.doc;
+        let attrs = &variant.attrs;
         let variant_ident = &variant.name.rust;
         let discriminant = &variant.discriminant;
         Some(quote! {
             #doc
+            #attrs
             pub const #variant_ident: Self = #ident { repr: #discriminant };
         })
     });
@@ -301,6 +307,7 @@
 
     quote! {
         #doc
+        #attrs
         #derives
         #[repr(transparent)]
         pub struct #ident {
@@ -325,6 +332,7 @@
 fn expand_cxx_type(ety: &ExternType) -> TokenStream {
     let ident = &ety.name.rust;
     let doc = &ety.doc;
+    let attrs = &ety.attrs;
     let generics = &ety.generics;
     let type_id = type_id(&ety.name);
 
@@ -335,6 +343,7 @@
 
     quote! {
         #doc
+        #attrs
         #[repr(C)]
         pub struct #ident #generics {
             _private: ::cxx::private::Opaque,
@@ -423,6 +432,7 @@
 
 fn expand_cxx_function_shim(efn: &ExternFn, types: &Types) -> TokenStream {
     let doc = &efn.doc;
+    let attrs = &efn.attrs;
     let decl = expand_cxx_function_decl(efn, types);
     let receiver = efn.receiver.iter().map(|receiver| {
         let var = receiver.var;
@@ -600,6 +610,7 @@
     let generics = &efn.generics;
     let function_shim = quote! {
         #doc
+        #attrs
         pub #unsafety fn #ident #generics(#(#all_args,)*) #ret {
             extern "C" {
                 #decl
@@ -977,11 +988,13 @@
 
 fn expand_type_alias(alias: &TypeAlias) -> TokenStream {
     let doc = &alias.doc;
+    let attrs = &alias.attrs;
     let ident = &alias.name.rust;
     let generics = &alias.generics;
     let ty = &alias.ty;
     quote! {
         #doc
+        #attrs
         pub type #ident #generics = #ty;
     }
 }