1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
use tower::{layer::util::Identity, Layer};

use crate::prepare_behave::effect_collectors::state_collector::StateCollector;

/// prepare for Middleware
///
/// it can adding middleware and state
pub trait PrepareMiddlewareEffect<S>: Sized + 'static {
    type Middleware: Layer<S> + 'static;

    fn take(self, states: &mut StateCollector) -> Self::Middleware;
}

impl<S> PrepareMiddlewareEffect<S> for () {
    type Middleware = Identity;

    fn take(self, _: &mut StateCollector) -> Self::Middleware {
        Identity::new()
    }
}