fidius-core::registry Rust¶
Plugin registry assembly for multi-plugin dylibs.
Each #[plugin_impl] submits its PluginDescriptor pointer via inventory::submit!.
Plugin crates call fidius_plugin_registry!() once in their lib.rs to emit the
fidius_get_registry export function that the host calls via dlsym.
Structs¶
fidius-core::registry::DescriptorEntry¶
pub
A submitted descriptor pointer. Used with inventory for distributed collection.
Fields¶
| Name | Type | Description |
|---|---|---|
descriptor |
& 'static PluginDescriptor |
Functions¶
fidius-core::registry::build_registry¶
private
Build the plugin registry from all submitted descriptors.
Allocates a Vec of descriptor pointers and leaks it to get a 'static pointer.
Called once; the result is cached in OnceLock.
Source
fn build_registry() -> PluginRegistry {
let entries: Vec<*const PluginDescriptor> = inventory::iter::<DescriptorEntry>()
.map(|e| e.descriptor as *const PluginDescriptor)
.collect();
let count = entries.len() as u32;
let ptr = entries.as_ptr();
std::mem::forget(entries);
PluginRegistry {
magic: FIDIUS_MAGIC,
registry_version: REGISTRY_VERSION,
plugin_count: count,
descriptors: ptr,
}
}
fidius-core::registry::get_registry¶
pub
Get or build the plugin registry.
Returns a 'static reference to the registry. Built on first call,
cached for subsequent calls.