1use crate::component::{ComponentPackage, ConstructFn, DependencyDecl, RestoreFn, SerializeFn};
6
7pub struct ConcreteComponentRegistration {
9 pub type_name: &'static str,
11 pub package: ComponentPackage,
13 pub serialize_fn: SerializeFn,
15 pub restore_fn: RestoreFn,
17 pub construct_fn: ConstructFn,
19 pub dependencies: &'static [DependencyDecl],
21}
22
23inventory::collect!(ConcreteComponentRegistration);
24
25pub fn find_concrete_component(type_name: &str) -> Option<&'static ConcreteComponentRegistration> {
28 inventory::iter::<ConcreteComponentRegistration>
29 .into_iter()
30 .find(|r| r.type_name == type_name)
31}
32
33pub fn concrete_components() -> impl Iterator<Item = &'static ConcreteComponentRegistration> {
35 inventory::iter::<ConcreteComponentRegistration>.into_iter()
36}
37
38pub use inventory;