kojin_core/middleware/
mod.rs1#[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#[async_trait]
26pub trait Middleware: Send + Sync + 'static {
27 async fn before(&self, message: &TaskMessage) -> Result<(), KojinError> {
29 let _ = message;
30 Ok(())
31 }
32
33 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 async fn on_error(&self, message: &TaskMessage, error: &KojinError) -> Result<(), KojinError> {
45 let _ = (message, error);
46 Ok(())
47 }
48}