use actix_service::Transform as ActixTransform;
use actix_web::dev::ServiceRequest;
use tower_layer::Layer as TowerLayerTrait;
use crate::compat::tower::layer::TowerLayer;
pub trait TransformAsLayer {
fn into_layer<S>(self) -> impl TowerLayerTrait<S>
where
S: Clone;
}
pub trait LayerAsTransform {
fn into_transform<S>(self) -> TowerLayer<Self>
where
Self: Sized,
{
TowerLayer::new(self)
}
}
impl<L> LayerAsTransform for L where L: TowerLayerTrait<()> {}
impl<T> TransformAsLayer for T
where
T: ActixTransform<(), ServiceRequest>,
{
fn into_layer<S>(self) -> impl TowerLayerTrait<S>
where
S: Clone,
{
tower_layer::layer_fn(move |service: S| service)
}
}