1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
use std::future::Future;
use futures_util::future::BoxFuture;
use crate::arguments::Arguments;
use crate::middleware::middleware::Middleware;
use teo_result::Result;
use crate::object::Object;
use crate::pipeline::Ctx;
use crate::pipeline::item::Call;

pub trait Creator {
    fn call(&self, arguments: Arguments) -> BoxFuture<'static, Result<&'static dyn Middleware>>;
}

impl<F, Fut> Creator for F where
    F: Fn(Arguments) -> Fut,
    Fut: Future<Output = Result<&'static dyn Middleware>> + Send + 'static {
    fn call(&self, args: Arguments) -> BoxFuture<'static, Result<&'static dyn Middleware>> {
        Box::pin(self(args))
    }
}