Enable UniquePtr::new for enums
diff --git a/macro/src/expand.rs b/macro/src/expand.rs
index 1fee928..9bfdecb 100644
--- a/macro/src/expand.rs
+++ b/macro/src/expand.rs
@@ -909,22 +909,24 @@
let link_release = format!("{}release", prefix);
let link_drop = format!("{}drop", prefix);
- let new_method =
- if types.structs.contains_key(&ident.rust) || types.aliases.contains_key(&ident.rust) {
- Some(quote! {
- fn __new(mut value: Self) -> *mut ::std::ffi::c_void {
- extern "C" {
- #[link_name = #link_new]
- fn __new(this: *mut *mut ::std::ffi::c_void, value: *mut #ident);
- }
- let mut repr = ::std::ptr::null_mut::<::std::ffi::c_void>();
- unsafe { __new(&mut repr, &mut value) }
- repr
+ let can_construct_from_value = types.structs.contains_key(&ident.rust)
+ || types.enums.contains_key(&ident.rust)
+ || types.aliases.contains_key(&ident.rust);
+ let new_method = if can_construct_from_value {
+ Some(quote! {
+ fn __new(mut value: Self) -> *mut ::std::ffi::c_void {
+ extern "C" {
+ #[link_name = #link_new]
+ fn __new(this: *mut *mut ::std::ffi::c_void, value: *mut #ident);
}
- })
- } else {
- None
- };
+ let mut repr = ::std::ptr::null_mut::<::std::ffi::c_void>();
+ unsafe { __new(&mut repr, &mut value) }
+ repr
+ }
+ })
+ } else {
+ None
+ };
let begin_span =
explicit_impl.map_or_else(Span::call_site, |explicit| explicit.impl_token.span);