pub trait ModuleAPI<'interface> {
Show 35 methods
// Required methods
fn register_loader<'loader, LT, L>(
&mut self,
loader: &'loader LT,
mod_type: &impl AsRef<str>,
) -> Result<Loader<'interface, Owned>, Error>
where L: ModuleLoaderAPI<'static>,
ModuleLoader<L, Owned>: From<&'loader LT>;
fn unregister_loader(
&mut self,
loader: Loader<'_, Owned>,
) -> Result<(), Error>;
fn get_loader_interface<'loader, O, L>(
&mut self,
loader: &Loader<'loader, O>,
) -> Result<ModuleLoader<L, O>, Error>
where O: ImmutableAccessIdentifier,
L: ModuleLoaderAPI<'loader> + ModuleLoaderABICompat;
fn get_loader_handle_from_type(
&self,
mod_type: &impl AsRef<str>,
) -> Result<Loader<'interface, BorrowMutable<'_>>, Error>;
fn get_loader_handle_from_module<'module, O>(
&self,
module: &Module<'module, O>,
) -> Result<Loader<'module, BorrowMutable<'_>>, Error>
where O: ImmutableAccessIdentifier;
fn get_num_modules(&self) -> usize;
fn get_num_loaders(&self) -> usize;
fn get_num_exported_interfaces(&self) -> usize;
fn module_exists<'module, O>(&self, module: &Module<'module, O>) -> bool
where O: ImmutableAccessIdentifier;
fn type_exists(&self, mod_type: &impl AsRef<str>) -> Result<bool, Error>;
fn exported_interface_exists(&self, interface: &InterfaceDescriptor) -> bool;
fn get_modules(
&self,
buffer: &mut impl AsMut<[ModuleInfo]>,
) -> Result<usize, Error>;
fn get_module_types(
&self,
buffer: &mut impl AsMut<[ModuleType]>,
) -> Result<usize, Error>;
fn get_exported_interfaces(
&self,
buffer: &mut impl AsMut<[InterfaceDescriptor]>,
) -> Result<usize, Error>;
fn get_exported_interface_handle(
&self,
interface: &InterfaceDescriptor,
) -> Result<Module<'interface, BorrowImmutable<'_>>, Error>;
unsafe fn create_module_handle(&mut self) -> Module<'interface, Owned>;
unsafe fn remove_module_handle(
&mut self,
module: Module<'_, Owned>,
) -> Result<(), Error>;
unsafe fn link_module<'module, 'loader, O, LO, IO>(
&mut self,
module: &Module<'module, O>,
loader: &Loader<'loader, LO>,
internal: &InternalModule<IO>,
) -> Result<(), Error>
where O: MutableAccessIdentifier,
LO: ImmutableAccessIdentifier,
IO: ImmutableAccessIdentifier,
'loader: 'module;
fn get_internal_module_handle<'module, O>(
&self,
module: &Module<'module, O>,
) -> Result<InternalModule<O>, Error>
where O: ImmutableAccessIdentifier;
fn add_module<O>(
&mut self,
loader: &Loader<'interface, O>,
path: &impl AsRef<Path>,
) -> Result<Module<'interface, Owned>, Error>
where O: MutableAccessIdentifier;
fn remove_module(&mut self, module: Module<'_, Owned>) -> Result<(), Error>;
fn load<O>(&mut self, module: &mut Module<'_, O>) -> Result<(), Error>
where O: MutableAccessIdentifier;
fn unload<O>(&mut self, module: &mut Module<'_, O>) -> Result<(), Error>
where O: MutableAccessIdentifier;
fn initialize<O>(&mut self, module: &mut Module<'_, O>) -> Result<(), Error>
where O: MutableAccessIdentifier;
fn terminate<O>(&mut self, module: &mut Module<'_, O>) -> Result<(), Error>
where O: MutableAccessIdentifier;
fn add_dependency<O>(
&mut self,
module: &mut Module<'_, O>,
interface: &InterfaceDescriptor,
) -> Result<(), Error>
where O: MutableAccessIdentifier;
fn remove_dependency<O>(
&mut self,
module: &mut Module<'_, O>,
interface: &InterfaceDescriptor,
) -> Result<(), Error>
where O: MutableAccessIdentifier;
fn export_interface<O>(
&mut self,
module: &Module<'_, O>,
interface: &InterfaceDescriptor,
) -> Result<(), Error>
where O: ImmutableAccessIdentifier;
fn get_load_dependencies<'module, O>(
&self,
module: &Module<'module, O>,
) -> Result<&'module [InterfaceDescriptor], Error>
where O: ImmutableAccessIdentifier;
fn get_runtime_dependencies<'module, O>(
&self,
module: &Module<'module, O>,
) -> Result<&'module [InterfaceDescriptor], Error>
where O: ImmutableAccessIdentifier;
fn get_exportable_interfaces<'module, O>(
&self,
module: &Module<'module, O>,
) -> Result<&'module [InterfaceDescriptor], Error>
where O: ImmutableAccessIdentifier;
fn fetch_status<O>(
&self,
module: &Module<'_, O>,
) -> Result<ModuleStatus, Error>
where O: ImmutableAccessIdentifier;
fn get_module_path<'module, O>(
&self,
module: &Module<'module, O>,
) -> Result<&'module [OSPathChar], Error>
where O: ImmutableAccessIdentifier;
fn get_module_info<'module, O>(
&self,
module: &Module<'module, O>,
) -> Result<&'module ModuleInfo, Error>
where O: ImmutableAccessIdentifier;
fn get_interface<'module, O, T>(
&self,
module: &'module Module<'_, O>,
interface: &InterfaceDescriptor,
caster: impl FnOnce(Interface) -> T,
) -> Result<Interface<'module, T>, Error>
where O: ImmutableAccessIdentifier;
}
Expand description
Idiomatic module api.
Required Methods§
Sourcefn register_loader<'loader, LT, L>(
&mut self,
loader: &'loader LT,
mod_type: &impl AsRef<str>,
) -> Result<Loader<'interface, Owned>, Error>
fn register_loader<'loader, LT, L>( &mut self, loader: &'loader LT, mod_type: &impl AsRef<str>, ) -> Result<Loader<'interface, Owned>, Error>
Sourcefn get_loader_interface<'loader, O, L>(
&mut self,
loader: &Loader<'loader, O>,
) -> Result<ModuleLoader<L, O>, Error>
fn get_loader_interface<'loader, O, L>( &mut self, loader: &Loader<'loader, O>, ) -> Result<ModuleLoader<L, O>, Error>
Sourcefn get_loader_handle_from_type(
&self,
mod_type: &impl AsRef<str>,
) -> Result<Loader<'interface, BorrowMutable<'_>>, Error>
fn get_loader_handle_from_type( &self, mod_type: &impl AsRef<str>, ) -> Result<Loader<'interface, BorrowMutable<'_>>, Error>
Sourcefn get_loader_handle_from_module<'module, O>(
&self,
module: &Module<'module, O>,
) -> Result<Loader<'module, BorrowMutable<'_>>, Error>where
O: ImmutableAccessIdentifier,
fn get_loader_handle_from_module<'module, O>(
&self,
module: &Module<'module, O>,
) -> Result<Loader<'module, BorrowMutable<'_>>, Error>where
O: ImmutableAccessIdentifier,
Sourcefn get_num_modules(&self) -> usize
fn get_num_modules(&self) -> usize
Sourcefn get_num_loaders(&self) -> usize
fn get_num_loaders(&self) -> usize
Sourcefn get_num_exported_interfaces(&self) -> usize
fn get_num_exported_interfaces(&self) -> usize
Sourcefn module_exists<'module, O>(&self, module: &Module<'module, O>) -> boolwhere
O: ImmutableAccessIdentifier,
fn module_exists<'module, O>(&self, module: &Module<'module, O>) -> boolwhere
O: ImmutableAccessIdentifier,
Sourcefn exported_interface_exists(&self, interface: &InterfaceDescriptor) -> bool
fn exported_interface_exists(&self, interface: &InterfaceDescriptor) -> bool
Sourcefn get_modules(
&self,
buffer: &mut impl AsMut<[ModuleInfo]>,
) -> Result<usize, Error>
fn get_modules( &self, buffer: &mut impl AsMut<[ModuleInfo]>, ) -> Result<usize, Error>
Sourcefn get_module_types(
&self,
buffer: &mut impl AsMut<[ModuleType]>,
) -> Result<usize, Error>
fn get_module_types( &self, buffer: &mut impl AsMut<[ModuleType]>, ) -> Result<usize, Error>
Sourcefn get_exported_interfaces(
&self,
buffer: &mut impl AsMut<[InterfaceDescriptor]>,
) -> Result<usize, Error>
fn get_exported_interfaces( &self, buffer: &mut impl AsMut<[InterfaceDescriptor]>, ) -> Result<usize, Error>
Sourcefn get_exported_interface_handle(
&self,
interface: &InterfaceDescriptor,
) -> Result<Module<'interface, BorrowImmutable<'_>>, Error>
fn get_exported_interface_handle( &self, interface: &InterfaceDescriptor, ) -> Result<Module<'interface, BorrowImmutable<'_>>, Error>
Sourceunsafe fn create_module_handle(&mut self) -> Module<'interface, Owned>
unsafe fn create_module_handle(&mut self) -> Module<'interface, Owned>
Creates a new unlinked module handle.
§Return
Module handle.
§Safety
The handle remains invalid until it’s linked with ModuleAPI::link_module.
Sourceunsafe fn link_module<'module, 'loader, O, LO, IO>(
&mut self,
module: &Module<'module, O>,
loader: &Loader<'loader, LO>,
internal: &InternalModule<IO>,
) -> Result<(), Error>where
O: MutableAccessIdentifier,
LO: ImmutableAccessIdentifier,
IO: ImmutableAccessIdentifier,
'loader: 'module,
unsafe fn link_module<'module, 'loader, O, LO, IO>(
&mut self,
module: &Module<'module, O>,
loader: &Loader<'loader, LO>,
internal: &InternalModule<IO>,
) -> Result<(), Error>where
O: MutableAccessIdentifier,
LO: ImmutableAccessIdentifier,
IO: ImmutableAccessIdentifier,
'loader: 'module,
Sourcefn get_internal_module_handle<'module, O>(
&self,
module: &Module<'module, O>,
) -> Result<InternalModule<O>, Error>where
O: ImmutableAccessIdentifier,
fn get_internal_module_handle<'module, O>(
&self,
module: &Module<'module, O>,
) -> Result<InternalModule<O>, Error>where
O: ImmutableAccessIdentifier,
Sourcefn add_module<O>(
&mut self,
loader: &Loader<'interface, O>,
path: &impl AsRef<Path>,
) -> Result<Module<'interface, Owned>, Error>where
O: MutableAccessIdentifier,
fn add_module<O>(
&mut self,
loader: &Loader<'interface, O>,
path: &impl AsRef<Path>,
) -> Result<Module<'interface, Owned>, Error>where
O: MutableAccessIdentifier,
Sourcefn load<O>(&mut self, module: &mut Module<'_, O>) -> Result<(), Error>where
O: MutableAccessIdentifier,
fn load<O>(&mut self, module: &mut Module<'_, O>) -> Result<(), Error>where
O: MutableAccessIdentifier,
Sourcefn unload<O>(&mut self, module: &mut Module<'_, O>) -> Result<(), Error>where
O: MutableAccessIdentifier,
fn unload<O>(&mut self, module: &mut Module<'_, O>) -> Result<(), Error>where
O: MutableAccessIdentifier,
Sourcefn initialize<O>(&mut self, module: &mut Module<'_, O>) -> Result<(), Error>where
O: MutableAccessIdentifier,
fn initialize<O>(&mut self, module: &mut Module<'_, O>) -> Result<(), Error>where
O: MutableAccessIdentifier,
Sourcefn terminate<O>(&mut self, module: &mut Module<'_, O>) -> Result<(), Error>where
O: MutableAccessIdentifier,
fn terminate<O>(&mut self, module: &mut Module<'_, O>) -> Result<(), Error>where
O: MutableAccessIdentifier,
Terminates a module.
Terminating a module also removes the interfaces it exported. The modules that depend on the module are terminated. If they list the module as a load dependency, they are also unloaded.
§Failure
Fails if module
is invalid or the module is not in a ready state.
§Return
Error on failure.
Sourcefn add_dependency<O>(
&mut self,
module: &mut Module<'_, O>,
interface: &InterfaceDescriptor,
) -> Result<(), Error>where
O: MutableAccessIdentifier,
fn add_dependency<O>(
&mut self,
module: &mut Module<'_, O>,
interface: &InterfaceDescriptor,
) -> Result<(), Error>where
O: MutableAccessIdentifier,
Sourcefn remove_dependency<O>(
&mut self,
module: &mut Module<'_, O>,
interface: &InterfaceDescriptor,
) -> Result<(), Error>where
O: MutableAccessIdentifier,
fn remove_dependency<O>(
&mut self,
module: &mut Module<'_, O>,
interface: &InterfaceDescriptor,
) -> Result<(), Error>where
O: MutableAccessIdentifier,
Sourcefn export_interface<O>(
&mut self,
module: &Module<'_, O>,
interface: &InterfaceDescriptor,
) -> Result<(), Error>where
O: ImmutableAccessIdentifier,
fn export_interface<O>(
&mut self,
module: &Module<'_, O>,
interface: &InterfaceDescriptor,
) -> Result<(), Error>where
O: ImmutableAccessIdentifier,
Sourcefn get_load_dependencies<'module, O>(
&self,
module: &Module<'module, O>,
) -> Result<&'module [InterfaceDescriptor], Error>where
O: ImmutableAccessIdentifier,
fn get_load_dependencies<'module, O>(
&self,
module: &Module<'module, O>,
) -> Result<&'module [InterfaceDescriptor], Error>where
O: ImmutableAccessIdentifier,
Sourcefn get_runtime_dependencies<'module, O>(
&self,
module: &Module<'module, O>,
) -> Result<&'module [InterfaceDescriptor], Error>where
O: ImmutableAccessIdentifier,
fn get_runtime_dependencies<'module, O>(
&self,
module: &Module<'module, O>,
) -> Result<&'module [InterfaceDescriptor], Error>where
O: ImmutableAccessIdentifier,
Sourcefn get_exportable_interfaces<'module, O>(
&self,
module: &Module<'module, O>,
) -> Result<&'module [InterfaceDescriptor], Error>where
O: ImmutableAccessIdentifier,
fn get_exportable_interfaces<'module, O>(
&self,
module: &Module<'module, O>,
) -> Result<&'module [InterfaceDescriptor], Error>where
O: ImmutableAccessIdentifier,
Sourcefn fetch_status<O>(&self, module: &Module<'_, O>) -> Result<ModuleStatus, Error>where
O: ImmutableAccessIdentifier,
fn fetch_status<O>(&self, module: &Module<'_, O>) -> Result<ModuleStatus, Error>where
O: ImmutableAccessIdentifier,
Sourcefn get_module_path<'module, O>(
&self,
module: &Module<'module, O>,
) -> Result<&'module [OSPathChar], Error>where
O: ImmutableAccessIdentifier,
fn get_module_path<'module, O>(
&self,
module: &Module<'module, O>,
) -> Result<&'module [OSPathChar], Error>where
O: ImmutableAccessIdentifier,
Sourcefn get_module_info<'module, O>(
&self,
module: &Module<'module, O>,
) -> Result<&'module ModuleInfo, Error>where
O: ImmutableAccessIdentifier,
fn get_module_info<'module, O>(
&self,
module: &Module<'module, O>,
) -> Result<&'module ModuleInfo, Error>where
O: ImmutableAccessIdentifier,
Sourcefn get_interface<'module, O, T>(
&self,
module: &'module Module<'_, O>,
interface: &InterfaceDescriptor,
caster: impl FnOnce(Interface) -> T,
) -> Result<Interface<'module, T>, Error>where
O: ImmutableAccessIdentifier,
fn get_interface<'module, O, T>(
&self,
module: &'module Module<'_, O>,
interface: &InterfaceDescriptor,
caster: impl FnOnce(Interface) -> T,
) -> Result<Interface<'module, T>, Error>where
O: ImmutableAccessIdentifier,
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.