use std::sync::Arc;
use tower::Layer;
use crate::config::WardenConfig;
use crate::error::WardenError;
use crate::service::{WardenService, WardenState};
#[derive(Debug, Clone)]
pub struct WardenLayer {
pub(crate) state: Arc<WardenState>,
}
impl WardenLayer {
pub fn new(config: WardenConfig) -> Result<Self, WardenError> {
let config = Arc::new(config);
let state = Arc::new(WardenState::new(config)?);
Ok(Self { state })
}
}
impl<S> Layer<S> for WardenLayer {
type Service = WardenService<S>;
fn layer(&self, inner: S) -> Self::Service {
WardenService {
inner,
state: self.state.clone(),
}
}
}