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}