Skip to main content

flare_core_runtime/middleware/
trait.rs

1//! Middleware trait 定义
2//!
3//! 中间件抽象,支持在任务执行前后插入自定义逻辑
4
5use crate::error::MiddlewareError;
6use async_trait::async_trait;
7
8/// 中间件抽象
9///
10/// 支持在任务执行前后插入自定义逻辑
11///
12/// # 实现说明
13///
14/// - 使用 async-trait 宏支持 trait objects
15/// - 所有中间件必须实现此 trait
16/// - 中间件按照注册顺序执行
17///
18/// # 示例
19///
20/// ```rust,ignore
21/// use flare_core_runtime::middleware::Middleware;
22/// use flare_core_runtime::error::MiddlewareError;
23///
24/// struct LoggingMiddleware;
25///
26/// impl Middleware for LoggingMiddleware {
27///     fn name(&self) -> &str {
28///         "logging"
29///     }
30///
31///     async fn before(&self, task_name: &str) -> Result<(), MiddlewareError> {
32///         tracing::info!("Task {} starting", task_name);
33///         Ok(())
34///     }
35///
36///     async fn after(&self, task_name: &str, result: &Result<(), Box<dyn std::error::Error + Send + Sync>>) -> Result<(), MiddlewareError> {
37///         tracing::info!("Task {} completed", task_name);
38///         Ok(())
39///     }
40/// }
41/// ```
42#[async_trait]
43pub trait Middleware: Send + Sync {
44    /// 获取中间件名称
45    fn name(&self) -> &str;
46
47    /// 任务执行前调用
48    ///
49    /// # 参数
50    ///
51    /// * `task_name` - 任务名称
52    ///
53    /// # 返回
54    ///
55    /// - `Ok(())` - 继续执行
56    /// - `Err(MiddlewareError)` - 中断中间件链
57    async fn before(&self, task_name: &str) -> Result<(), MiddlewareError> {
58        let _ = task_name;
59        Ok(())
60    }
61
62    /// 任务执行后调用
63    ///
64    /// # 参数
65    ///
66    /// * `task_name` - 任务名称
67    /// * `result` - 任务执行结果
68    ///
69    /// # 返回
70    ///
71    /// - `Ok(())` - 继续执行
72    /// - `Err(MiddlewareError)` - 中断中间件链
73    async fn after(
74        &self,
75        task_name: &str,
76        result: &Result<(), Box<dyn std::error::Error + Send + Sync>>,
77    ) -> Result<(), MiddlewareError> {
78        let _ = (task_name, result);
79        Ok(())
80    }
81}