use proc_macro2::TokenStream as TokenStream2;
use quote::quote;
use syn::TypePath;
pub(super) fn plugin_init(ty: &syn::Ident, handlerton: Option<&TypePath>) -> TokenStream2 {
let handlerton_init = match handlerton {
Some(path) => quote! {
::mysql_handler::runtime::register_handlerton(::std::boxed::Box::new(
<#path as ::core::default::Default>::default(),
));
},
None => quote! {},
};
quote! {
#[unsafe(no_mangle)]
#[doc(hidden)]
pub unsafe extern "C" fn rust__plugin_init() {
::mysql_handler::panic_guard::FfiBoundary::run_void(|| {
::mysql_handler::runtime::register_engine_factory(|| {
let engine: ::std::boxed::Box<
dyn ::mysql_handler::engine::StorageEngine,
> = ::std::boxed::Box::new(
<#ty as ::core::default::Default>::default(),
);
engine
});
#handlerton_init
});
}
}
}