2022-03-01 02:31:49 +11:00
mod factory ;
2022-03-01 00:45:31 +11:00
/// Re-export for the wrapper.
2022-03-01 02:31:49 +11:00
pub use self ::factory ::Factory ;
pub use clap_sys ::entry ::clap_plugin_entry ;
pub use clap_sys ::plugin_factory ::CLAP_PLUGIN_FACTORY_ID ;
pub use clap_sys ::version ::CLAP_VERSION ;
pub use lazy_static ::lazy_static ;
2022-03-01 00:45:31 +11:00
/// Export a CLAP plugin from this library using the provided plugin type.
#[ macro_export ]
macro_rules ! nih_export_clap {
( $plugin_ty :ty ) = > {
2022-03-01 04:17:01 +11:00
// We need a function pointer to a [wrapper::get_factory()] that creates a factory for `$plugin_ty`, so we need to generate the function inside of this macro
2022-03-01 00:45:31 +11:00
#[ doc(hidden) ]
mod clap {
2022-03-01 02:31:49 +11:00
// Because `$plugin_ty` is likely defined in the enclosing scope
use super ::* ;
// We don't use generics inside of statics, so this lazy_static is used as kind of an
// escape hatch
::nih_plug ::wrapper ::clap ::lazy_static! {
2022-03-01 03:30:21 +11:00
static ref FACTORY : ::nih_plug ::wrapper ::clap ::Factory < $plugin_ty > = ::nih_plug ::wrapper ::clap ::Factory ::default ( ) ;
2022-03-01 02:31:49 +11:00
}
2022-03-01 00:45:31 +11:00
// We don't need any special initialization or deinitialization handling
2022-03-01 02:46:06 +11:00
pub extern " C " fn init ( _plugin_path : * const ::std ::os ::raw ::c_char ) -> bool {
2022-03-01 00:45:31 +11:00
true
}
2022-03-01 04:17:01 +11:00
pub extern " C " fn deinit ( ) { }
2022-03-01 00:45:31 +11:00
2022-03-01 02:46:06 +11:00
pub extern " C " fn get_factory (
2022-03-01 00:45:31 +11:00
factory_id : * const ::std ::os ::raw ::c_char ,
) -> * const ::std ::ffi ::c_void {
2022-03-01 02:31:49 +11:00
if ! factory_id . is_null ( )
& & unsafe { ::std ::ffi ::CStr ::from_ptr ( factory_id ) }
2022-03-01 04:17:01 +11:00
= = unsafe {
::std ::ffi ::CStr ::from_ptr (
::nih_plug ::wrapper ::clap ::CLAP_PLUGIN_FACTORY_ID ,
)
}
2022-03-01 02:31:49 +11:00
{
2022-03-01 03:30:21 +11:00
& ( * FACTORY ) . clap_plugin_factory as * const _ as * const ::std ::ffi ::c_void
2022-03-01 02:31:49 +11:00
} else {
std ::ptr ::null ( )
}
2022-03-01 00:45:31 +11:00
}
}
#[ no_mangle ]
#[ used ]
pub static clap_entry : ::nih_plug ::wrapper ::clap ::clap_plugin_entry =
::nih_plug ::wrapper ::clap ::clap_plugin_entry {
clap_version : ::nih_plug ::wrapper ::clap ::CLAP_VERSION ,
2022-03-01 02:46:06 +11:00
init : self ::clap ::init ,
deinit : self ::clap ::deinit ,
get_factory : self ::clap ::get_factory ,
2022-03-01 00:45:31 +11:00
} ;
} ;
}