use super::base::{boxed_middleware_factory, BoxedCloneMiddlewareService, Middleware};
pub struct Manager<Client> {
pub middlewares: Vec<BoxedCloneMiddlewareService<Client>>,
}
impl<Client> Manager<Client> {
pub fn register(&mut self, middleware: impl Middleware<Client>) -> &mut Self
where
Client: Send + Sync + 'static,
{
self.middlewares.push(boxed_middleware_factory(middleware));
self
}
pub fn register_boxed(&mut self, middleware: BoxedCloneMiddlewareService<Client>) -> &mut Self {
self.middlewares.push(middleware);
self
}
pub fn register_at_position(
&mut self,
index: usize,
middleware: impl Middleware<Client>,
) -> &mut Self
where
Client: Send + Sync + 'static,
{
self.middlewares
.insert(index, boxed_middleware_factory(middleware));
self
}
pub fn register_boxed_at_position(
&mut self,
index: usize,
middleware: BoxedCloneMiddlewareService<Client>,
) -> &mut Self {
self.middlewares.insert(index, middleware);
self
}
}
impl<Client> Default for Manager<Client> {
#[inline]
fn default() -> Self {
Self {
middlewares: vec![],
}
}
}
impl<Client> Clone for Manager<Client> {
#[inline]
fn clone(&self) -> Self {
Self {
middlewares: self.middlewares.clone(),
}
}
}