systemprompt_database/scope/
registry.rs1use std::sync::OnceLock;
7
8use super::provider::SharedScopeProvider;
9
10#[derive(Debug, Clone, Copy)]
12pub struct ScopeProviderRegistration {
13 pub factory: fn() -> SharedScopeProvider,
14}
15
16inventory::collect!(ScopeProviderRegistration);
17
18#[must_use]
19pub fn discover_scope_providers() -> Vec<SharedScopeProvider> {
20 inventory::iter::<ScopeProviderRegistration>()
21 .map(|reg| (reg.factory)())
22 .collect()
23}
24
25#[must_use]
26pub fn scope_providers() -> &'static [SharedScopeProvider] {
27 static PROVIDERS: OnceLock<Vec<SharedScopeProvider>> = OnceLock::new();
28 PROVIDERS.get_or_init(discover_scope_providers)
29}
30
31#[macro_export]
32macro_rules! register_scope_provider {
33 ($factory:expr) => {
34 ::inventory::submit! {
35 $crate::scope::ScopeProviderRegistration {
36 factory: $factory,
37 }
38 }
39 };
40}