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