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}