feat(service): allow FnMut with service_fn
				
					
				
			This commit is contained in:
		| @@ -115,7 +115,7 @@ where | ||||
| /// ``` | ||||
| pub fn make_service_fn<F, Ctx, Ret>(f: F) -> MakeServiceFn<F> | ||||
| where | ||||
|     F: Fn(&Ctx) -> Ret, | ||||
|     F: FnMut(&Ctx) -> Ret, | ||||
|     Ret: IntoFuture, | ||||
| { | ||||
|     MakeServiceFn { | ||||
| @@ -130,7 +130,7 @@ pub struct MakeServiceFn<F> { | ||||
|  | ||||
| impl<'c, F, Ctx, Ret, ReqBody, ResBody> MakeService<&'c Ctx> for MakeServiceFn<F> | ||||
| where | ||||
|     F: Fn(&Ctx) -> Ret, | ||||
|     F: FnMut(&Ctx) -> Ret, | ||||
|     Ret: IntoFuture, | ||||
|     Ret::Item: Service<ReqBody=ReqBody, ResBody=ResBody>, | ||||
|     Ret::Error: Into<Box<StdError + Send + Sync>>, | ||||
|   | ||||
| @@ -51,7 +51,7 @@ pub trait Service { | ||||
| /// ``` | ||||
| pub fn service_fn<F, R, S>(f: F) -> ServiceFn<F, R> | ||||
| where | ||||
|     F: Fn(Request<R>) -> S, | ||||
|     F: FnMut(Request<R>) -> S, | ||||
|     S: IntoFuture, | ||||
| { | ||||
|     ServiceFn { | ||||
| @@ -75,7 +75,7 @@ where | ||||
| /// ``` | ||||
| pub fn service_fn_ok<F, R, S>(f: F) -> ServiceFnOk<F, R> | ||||
| where | ||||
|     F: Fn(Request<R>) -> Response<S>, | ||||
|     F: FnMut(Request<R>) -> Response<S>, | ||||
|     S: Payload, | ||||
| { | ||||
|     ServiceFnOk { | ||||
| @@ -92,7 +92,7 @@ pub struct ServiceFn<F, R> { | ||||
|  | ||||
| impl<F, ReqBody, Ret, ResBody> Service for ServiceFn<F, ReqBody> | ||||
| where | ||||
|     F: Fn(Request<ReqBody>) -> Ret, | ||||
|     F: FnMut(Request<ReqBody>) -> Ret, | ||||
|     ReqBody: Payload, | ||||
|     Ret: IntoFuture<Item=Response<ResBody>>, | ||||
|     Ret::Error: Into<Box<StdError + Send + Sync>>, | ||||
| @@ -133,7 +133,7 @@ pub struct ServiceFnOk<F, R> { | ||||
|  | ||||
| impl<F, ReqBody, ResBody> Service for ServiceFnOk<F, ReqBody> | ||||
| where | ||||
|     F: Fn(Request<ReqBody>) -> Response<ResBody>, | ||||
|     F: FnMut(Request<ReqBody>) -> Response<ResBody>, | ||||
|     ReqBody: Payload, | ||||
|     ResBody: Payload, | ||||
| { | ||||
| @@ -163,3 +163,24 @@ impl<F, R> fmt::Debug for ServiceFnOk<F, R> { | ||||
|             .finish() | ||||
|     } | ||||
| } | ||||
|  | ||||
| //#[cfg(test)] | ||||
| fn _assert_fn_mut() { | ||||
|     fn assert_service<T: Service>(_t: &T) {} | ||||
|  | ||||
|     let mut val = 0; | ||||
|  | ||||
|     let svc = service_fn(move |_req: Request<::Body>| { | ||||
|         val += 1; | ||||
|         future::ok::<_, Never>(Response::new(::Body::empty())) | ||||
|     }); | ||||
|  | ||||
|     assert_service(&svc); | ||||
|  | ||||
|     let svc = service_fn_ok(move |_req: Request<::Body>| { | ||||
|         val += 1; | ||||
|         Response::new(::Body::empty()) | ||||
|     }); | ||||
|  | ||||
|     assert_service(&svc); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user