diff --git a/actix-service/src/lib.rs b/actix-service/src/lib.rs index 38e220af..052c53a2 100644 --- a/actix-service/src/lib.rs +++ b/actix-service/src/lib.rs @@ -335,7 +335,7 @@ pub trait NewService { fn map_err(self, f: F) -> MapErrNewService where Self: Sized, - F: Fn(Self::Error) -> E, + F: Fn(Self::Error) -> E + Clone, { MapErrNewService::new(self, f) } diff --git a/actix-service/src/map_err.rs b/actix-service/src/map_err.rs index cd15d239..3cf18d7e 100644 --- a/actix-service/src/map_err.rs +++ b/actix-service/src/map_err.rs @@ -98,19 +98,23 @@ where /// service's error. /// /// This is created by the `NewServiceExt::map_err` method. -pub struct MapErrNewService { +pub struct MapErrNewService +where + A: NewService, + F: Fn(A::Error) -> E + Clone, +{ a: A, f: F, e: PhantomData<(E, C)>, } -impl MapErrNewService { +impl MapErrNewService +where + A: NewService, + F: Fn(A::Error) -> E + Clone, +{ /// Create new `MapErr` new service instance - pub fn new(a: A, f: F) -> Self - where - A: NewService, - F: Fn(A::Error) -> E, - { + pub fn new(a: A, f: F) -> Self { Self { a, f, @@ -121,8 +125,8 @@ impl MapErrNewService { impl Clone for MapErrNewService where - A: Clone, - F: Clone, + A: NewService + Clone, + F: Fn(A::Error) -> E + Clone, { fn clone(&self) -> Self { Self {