shield_actix/
transform.rs1use actix_utils::future::{ready, Ready};
2use actix_web::{
3 dev::{Service, ServiceRequest, ServiceResponse, Transform},
4 Error,
5};
6use shield::{Shield, User};
7
8use crate::service::ShieldService;
9
10pub type ShieldMiddleware<U> = ShieldTransform<U>;
13
14pub struct ShieldTransform<U: User> {
15 shield: Shield<U>,
16}
17
18impl<U: User> ShieldTransform<U> {
19 pub fn new(shield: Shield<U>) -> Self {
20 Self { shield }
21 }
22}
23
24impl<S, U: User + Clone + 'static, ResBody> Transform<S, ServiceRequest> for ShieldTransform<U>
25where
26 S: Service<ServiceRequest, Response = ServiceResponse<ResBody>, Error = Error>,
27{
28 type Response = ServiceResponse<ResBody>;
29 type Error = Error;
30 type Transform = ShieldService<S, U>;
31 type InitError = ();
32 type Future = Ready<Result<Self::Transform, Self::InitError>>;
33
34 fn new_transform(&self, inner: S) -> Self::Future {
35 ready(Ok(ShieldService::new(inner, self.shield.clone())))
36 }
37}