From 42a46796357dfda6e4683f23ae21738bd266662b Mon Sep 17 00:00:00 2001
From: Nikolay Kim <fafhrd91@gmail.com>
Date: Wed, 5 Dec 2018 17:43:31 -0800
Subject: [PATCH] use FnMut for apply combinator

---
 src/service/apply.rs | 16 ++++++++--------
 src/service/mod.rs   |  4 ++--
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/service/apply.rs b/src/service/apply.rs
index 5eea7448..2db93103 100644
--- a/src/service/apply.rs
+++ b/src/service/apply.rs
@@ -17,7 +17,7 @@ where
 impl<T, F, In, Out, Request> Apply<T, F, In, Out, Request>
 where
     T: Service<Request>,
-    F: Fn(In, &mut T) -> Out,
+    F: FnMut(In, &mut T) -> Out,
     Out: IntoFuture,
 {
     /// Create new `Apply` combinator
@@ -47,7 +47,7 @@ where
 impl<T, F, In, Out, Request> Service<In> for Apply<T, F, In, Out, Request>
 where
     T: Service<Request, Error = Out::Error>,
-    F: Fn(In, &mut T) -> Out,
+    F: FnMut(In, &mut T) -> Out,
     Out: IntoFuture,
 {
     type Response = <Out::Future as Future>::Item;
@@ -76,7 +76,7 @@ where
 impl<T, F, In, Out, Request> ApplyNewService<T, F, In, Out, Request>
 where
     T: NewService<Request>,
-    F: Fn(In, &mut T::Service) -> Out,
+    F: FnMut(In, &mut T::Service) -> Out,
     Out: IntoFuture,
 {
     /// Create new `ApplyNewService` new service instance
@@ -92,7 +92,7 @@ where
 impl<T, F, In, Out, Request> Clone for ApplyNewService<T, F, In, Out, Request>
 where
     T: NewService<Request> + Clone,
-    F: Fn(Out, &mut T::Service) -> Out + Clone,
+    F: FnMut(Out, &mut T::Service) -> Out + Clone,
     Out: IntoFuture,
 {
     fn clone(&self) -> Self {
@@ -107,7 +107,7 @@ where
 impl<T, F, In, Out, Request> NewService<In> for ApplyNewService<T, F, In, Out, Request>
 where
     T: NewService<Request, Error = Out::Error>,
-    F: Fn(In, &mut T::Service) -> Out + Clone,
+    F: FnMut(In, &mut T::Service) -> Out + Clone,
     Out: IntoFuture,
 {
     type Response = <Out::Future as Future>::Item;
@@ -125,7 +125,7 @@ where
 pub struct ApplyNewServiceFuture<T, F, In, Out, Request>
 where
     T: NewService<Request>,
-    F: Fn(In, &mut T::Service) -> Out,
+    F: FnMut(In, &mut T::Service) -> Out,
     Out: IntoFuture,
 {
     fut: T::Future,
@@ -136,7 +136,7 @@ where
 impl<T, F, In, Out, Request> ApplyNewServiceFuture<T, F, In, Out, Request>
 where
     T: NewService<Request>,
-    F: Fn(In, &mut T::Service) -> Out,
+    F: FnMut(In, &mut T::Service) -> Out,
     Out: IntoFuture,
 {
     fn new(fut: T::Future, f: F) -> Self {
@@ -151,7 +151,7 @@ where
 impl<T, F, In, Out, Request> Future for ApplyNewServiceFuture<T, F, In, Out, Request>
 where
     T: NewService<Request>,
-    F: Fn(In, &mut T::Service) -> Out,
+    F: FnMut(In, &mut T::Service) -> Out,
     Out: IntoFuture,
 {
     type Item = Apply<T::Service, F, In, Out, Request>;
diff --git a/src/service/mod.rs b/src/service/mod.rs
index 3952a801..6ca60eb7 100644
--- a/src/service/mod.rs
+++ b/src/service/mod.rs
@@ -35,7 +35,7 @@ pub trait ServiceExt<Request>: Service<Request> {
         Self: Sized,
         T: Service<Req, Error = Out::Error>,
         I: IntoService<T, Req>,
-        F: Fn(Self::Response, &mut T) -> Out,
+        F: FnMut(Self::Response, &mut T) -> Out,
         Out: IntoFuture<Error = Self::Error>,
     {
         self.and_then(Apply::new(service.into_service(), f))
@@ -158,7 +158,7 @@ pub trait NewServiceExt<Request>: NewService<Request> {
         Self: Sized,
         T: NewService<Req, InitError = Self::InitError, Error = Out::Error>,
         I: IntoNewService<T, Req>,
-        F: Fn(Self::Response, &mut T::Service) -> Out + Clone,
+        F: FnMut(Self::Response, &mut T::Service) -> Out + Clone,
         Out: IntoFuture<Error = Self::Error>,
     {
         self.and_then(ApplyNewService::new(service, f))