feat(service): Implement Clone/Copy on ServiceFn and MakeServiceFn (#2104)

This commit is contained in:
Markus Westerlind
2020-01-08 21:44:07 +01:00
committed by Sean McArthur
parent 0eaf304644
commit a5720fab4c
2 changed files with 17 additions and 3 deletions

View File

@@ -15,7 +15,6 @@ pub trait MakeConnection<Target>: self::sealed::Sealed<(Target,)> {
type Future: Future<Output = Result<Self::Connection, Self::Error>>;
fn poll_ready(&mut self, cx: &mut task::Context<'_>) -> Poll<Result<(), Self::Error>>;
fn make_connection(&mut self, target: Target) -> Self::Future;
}
@@ -144,7 +143,8 @@ where
MakeServiceFn { f }
}
// Not exported from crate as this will likely be replaced with `impl Service`.
/// `MakeService` returned from [`make_service_fn`]
#[derive(Clone, Copy)]
pub struct MakeServiceFn<F> {
f: F,
}

View File

@@ -35,7 +35,7 @@ where
}
}
// Not exported from crate as this will likely be replaced with `impl Service`.
/// Service returned by [`service_fn`]
pub struct ServiceFn<F, R> {
f: F,
_req: PhantomData<fn(R)>,
@@ -68,3 +68,17 @@ impl<F, R> fmt::Debug for ServiceFn<F, R> {
f.debug_struct("impl Service").finish()
}
}
impl<F, R> Clone for ServiceFn<F, R>
where
F: Clone,
{
fn clone(&self) -> Self {
ServiceFn {
f: self.f.clone(),
_req: PhantomData,
}
}
}
impl<F, R> Copy for ServiceFn<F, R> where F: Copy {}