Fix span placement on extern C++ type
diff --git a/macro/src/expand.rs b/macro/src/expand.rs
index 4fec02d..b6746ac 100644
--- a/macro/src/expand.rs
+++ b/macro/src/expand.rs
@@ -360,15 +360,25 @@
let field = format_ident!("_lifetime_{}", lifetime.ident);
quote!(#field: ::std::marker::PhantomData<&#lifetime ()>)
});
+ let repr_fields = quote! {
+ _private: ::cxx::private::Opaque,
+ #(#lifetime_fields,)*
+ };
+
+ let span = ident.span();
+ let visibility = &ety.visibility;
+ let struct_token = Token;
+ let extern_type_def = quote_spanned! {span=>
+ #visibility #struct_token #ident #generics {
+ #repr_fields
+ }
+ };
quote! {
#doc
#attrs
#[repr(C)]
- pub struct #ident #generics {
- _private: ::cxx::private::Opaque,
- #(#lifetime_fields,)*
- }
+ #extern_type_def
unsafe impl #generics ::cxx::ExternType for #ident #generics {
type Id = #type_id;