baizekit_app/
component.rs1use async_trait::async_trait;
2use config::Config;
3use std::any::Any;
4
5#[async_trait]
7pub trait Component: Send + Sync + 'static {
8 async fn init(&mut self, _config: &Config, _label: String) -> anyhow::Result<()> {
10 Ok(())
11 }
12
13 async fn shutdown(&self) -> anyhow::Result<()> {
15 Ok(())
16 }
17}
18
19pub trait DynComponent: Component + Any + Send + Sync + 'static {
21 fn as_any(&self) -> &dyn Any;
23
24 fn type_name(&self) -> &'static str {
26 std::any::type_name::<Self>()
27 }
28}
29
30impl<T: Component + Any + Send + Sync + 'static> DynComponent for T {
31 fn as_any(&self) -> &dyn Any {
32 self
33 }
34}