drasi_core/interface/
source_middleware.rs1use std::sync::Arc;
16
17use async_trait::async_trait;
18use thiserror::Error;
19
20use crate::models::{SourceChange, SourceMiddlewareConfig};
21
22#[derive(Error, Debug)]
23pub enum MiddlewareError {
24 #[error("Error processing source change: {0}")]
25 SourceChangeError(String),
26
27 #[error("Unknown middleware {0}")]
28 UnknownKind(String),
29}
30
31#[derive(Error, Debug)]
32pub enum MiddlewareSetupError {
33 #[error("Invalid configuration: {0}")]
34 InvalidConfiguration(String),
35 #[error("No registry found for middleware")]
36 NoRegistry,
37}
38
39#[async_trait]
40pub trait SourceMiddleware: Send + Sync {
41 async fn process(
42 &self,
43 source_change: SourceChange,
44 ) -> Result<Vec<SourceChange>, MiddlewareError>;
45}
46
47pub trait SourceMiddlewareFactory: Send + Sync {
48 fn name(&self) -> String;
49 fn create(
50 &self,
51 config: &SourceMiddlewareConfig,
52 ) -> Result<Arc<dyn SourceMiddleware>, MiddlewareSetupError>;
53 }