baizekit_app/
component.rs

1use async_trait::async_trait;
2use config::Config;
3use std::any::Any;
4
5/// 组件核心 trait,定义组件生命周期
6#[async_trait]
7pub trait Component: Send + Sync + 'static {
8    /// 初始化组件
9    async fn init(&mut self, _config: &Config, _label: String) -> anyhow::Result<()> {
10        Ok(())
11    }
12
13    /// 关闭组件
14    async fn shutdown(&self) -> anyhow::Result<()> {
15        Ok(())
16    }
17}
18
19/// 支持动态类型转换的组件 trait
20pub trait DynComponent: Component + Any + Send + Sync + 'static {
21    /// 转换为 Any 类型,用于向下转型
22    fn as_any(&self) -> &dyn Any;
23
24    /// 获取组件类型名称
25    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}