Skip to main content

kojin_core/middleware/
mod.rs

1#[cfg(feature = "dedup")]
2pub mod dedup;
3mod metrics;
4#[cfg(feature = "otel")]
5pub mod otel;
6#[cfg(feature = "rate-limit")]
7pub mod rate_limit;
8mod tracing_mw;
9
10#[cfg(feature = "dedup")]
11pub use dedup::DeduplicationMiddleware;
12pub use metrics::MetricsMiddleware;
13#[cfg(feature = "otel")]
14pub use otel::OtelMiddleware;
15#[cfg(feature = "rate-limit")]
16pub use rate_limit::RateLimitMiddleware;
17pub use tracing_mw::TracingMiddleware;
18
19use async_trait::async_trait;
20
21use crate::error::KojinError;
22use crate::message::TaskMessage;
23
24/// Middleware hook for task execution pipeline.
25#[async_trait]
26pub trait Middleware: Send + Sync + 'static {
27    /// Called before task execution. Return `Err` to abort.
28    async fn before(&self, message: &TaskMessage) -> Result<(), KojinError> {
29        let _ = message;
30        Ok(())
31    }
32
33    /// Called after successful task execution.
34    async fn after(
35        &self,
36        message: &TaskMessage,
37        result: &serde_json::Value,
38    ) -> Result<(), KojinError> {
39        let _ = (message, result);
40        Ok(())
41    }
42
43    /// Called when task execution fails.
44    async fn on_error(&self, message: &TaskMessage, error: &KojinError) -> Result<(), KojinError> {
45        let _ = (message, error);
46        Ok(())
47    }
48}