use core::future::Future;
use core::pin::Pin;
use crate::{EventBus, EventBusError, Subscription};
pub trait HandlerRegistrar: Send + Sync + 'static {
fn register<'a>(&self, bus: &'a EventBus) -> Pin<Box<dyn Future<Output = Result<Subscription, EventBusError>> + Send + 'a>>;
}
inventory::collect!(&'static dyn HandlerRegistrar);
pub async fn register_all(bus: &EventBus) -> Result<(), EventBusError> {
for registrar in inventory::iter::<&'static dyn HandlerRegistrar>.into_iter() {
let _ = registrar.register(bus).await?;
}
Ok(())
}
#[doc(hidden)]
pub mod _private {
pub use inventory;
}