ouroboros_macro/generate/
drop.rs
1use crate::info_structures::StructInfo;
2use proc_macro2::TokenStream;
3use quote::quote;
4use syn::Error;
5
6pub fn create_drop_impl(info: &StructInfo) -> Result<TokenStream, Error> {
7 let ident = &info.ident;
8 let generics = &info.generics;
9 let generic_args = info.generic_arguments();
10
11 let mut where_clause = quote! {};
12 if let Some(clause) = &generics.where_clause {
13 where_clause = quote! { #clause };
14 }
15 Ok(quote! {
16 impl #generics ::core::ops::Drop for #ident<#(#generic_args,)*> #where_clause {
17 fn drop(&mut self) {
18 unsafe { self.actual_data.assume_init_drop() };
19 }
20 }
21 })
22}