use proc_macro2::TokenStream;
use quote::quote;
use weaveffi_core::model::InterfaceBinding;
use super::helpers::ident;
pub(crate) fn gen_interface_destroy(i: &InterfaceBinding) -> TokenStream {
let sym = ident(&i.destroy_symbol);
let ty = ident(&i.name);
quote! {
#[no_mangle]
#[allow(unsafe_code, clippy::not_unsafe_ptr_arg_deref)]
pub extern "C" fn #sym(ptr: *mut #ty) {
if !ptr.is_null() {
let _ = ::std::panic::catch_unwind(::std::panic::AssertUnwindSafe(|| {
unsafe { drop(::std::boxed::Box::from_raw(ptr)) }
}));
}
}
}
}