1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use crate::{error::Error, ModuleParam};

pub trait Adapter: Send + Sync {
    fn adapt(&self, input: ModuleParam) -> ModuleParam;
}

impl<F: Fn(ModuleParam) -> ModuleParam + Send + Sync + 'static> Adapter for F {
    fn adapt(&self, input: ModuleParam) -> ModuleParam {
        self(input)
    }
}

#[async_trait::async_trait]
pub trait UnitProcess: Send + Sync {
    fn get_name(&self) -> &str;
    async fn process(&self, input: ModuleParam) -> Result<ModuleParam, Error>;
}