From 4c5068c01f0ea48bde9cd5dbff78b6f6abed597d Mon Sep 17 00:00:00 2001 From: David Pedersen Date: Thu, 26 Aug 2021 20:59:55 +0200 Subject: [PATCH] Add `Send + Sync` check to all services (#277) Should prevent us accidentally introducing breaking changes. Fixes https://github.com/tokio-rs/axum/issues/275 --- src/extract/connect_info.rs | 7 +++++++ src/extract/extractor_middleware.rs | 7 +++++++ src/handler/into_service.rs | 7 +++++++ src/handler/mod.rs | 7 +++++++ src/routing/mod.rs | 29 +++++++++++++++++++++++++++++ src/routing/or.rs | 7 +++++++ src/service/mod.rs | 11 +++++++++++ src/tests/mod.rs | 2 ++ 8 files changed, 77 insertions(+) diff --git a/src/extract/connect_info.rs b/src/extract/connect_info.rs index b8630650..82d01104 100644 --- a/src/extract/connect_info.rs +++ b/src/extract/connect_info.rs @@ -29,6 +29,13 @@ pub struct IntoMakeServiceWithConnectInfo { _connect_info: PhantomData C>, } +#[test] +fn traits() { + use crate::tests::*; + assert_send::>(); + assert_sync::>(); +} + impl IntoMakeServiceWithConnectInfo { pub(crate) fn new(svc: S) -> Self { Self { diff --git a/src/extract/extractor_middleware.rs b/src/extract/extractor_middleware.rs index 806f37d6..2bcb9ac4 100644 --- a/src/extract/extractor_middleware.rs +++ b/src/extract/extractor_middleware.rs @@ -132,6 +132,13 @@ pub struct ExtractorMiddleware { _extractor: PhantomData E>, } +#[test] +fn traits() { + use crate::tests::*; + assert_send::>(); + assert_sync::>(); +} + impl Clone for ExtractorMiddleware where S: Clone, diff --git a/src/handler/into_service.rs b/src/handler/into_service.rs index 321fa1bd..5588aa55 100644 --- a/src/handler/into_service.rs +++ b/src/handler/into_service.rs @@ -17,6 +17,13 @@ pub struct IntoService { _marker: PhantomData (B, T)>, } +#[test] +fn traits() { + use crate::tests::*; + assert_send::>(); + assert_sync::>(); +} + impl IntoService { pub(super) fn new(handler: H) -> Self { Self { diff --git a/src/handler/mod.rs b/src/handler/mod.rs index 5e262d34..0b00168e 100644 --- a/src/handler/mod.rs +++ b/src/handler/mod.rs @@ -441,6 +441,13 @@ pub struct OnMethod { pub(crate) _marker: PhantomData (B, T)>, } +#[test] +fn traits() { + use crate::tests::*; + assert_send::>(); + assert_sync::>(); +} + impl fmt::Debug for OnMethod where T: fmt::Debug, diff --git a/src/routing/mod.rs b/src/routing/mod.rs index c8456618..dfb9c523 100644 --- a/src/routing/mod.rs +++ b/src/routing/mod.rs @@ -1106,4 +1106,33 @@ mod tests { route_spec ); } + + #[test] + fn traits() { + use crate::tests::*; + + assert_send::>(); + assert_sync::>(); + + assert_send::>(); + assert_sync::>(); + + assert_send::>(); + assert_sync::>(); + + assert_send::>(); + assert_sync::>(); + + assert_send::>(); + assert_sync::>(); + + assert_send::>(); + assert_sync::>(); + + assert_send::>(); + assert_sync::>(); + + assert_send::>(); + assert_sync::>(); + } } diff --git a/src/routing/or.rs b/src/routing/or.rs index 4699cea9..0898f0aa 100644 --- a/src/routing/or.rs +++ b/src/routing/or.rs @@ -24,6 +24,13 @@ pub struct Or { pub(super) second: B, } +#[test] +fn traits() { + use crate::tests::*; + assert_send::>(); + assert_sync::>(); +} + #[allow(warnings)] impl Service> for Or where diff --git a/src/service/mod.rs b/src/service/mod.rs index d7951fb9..5138abac 100644 --- a/src/service/mod.rs +++ b/src/service/mod.rs @@ -596,3 +596,14 @@ where } } } + +#[test] +fn traits() { + use crate::tests::*; + + assert_send::>(); + assert_sync::>(); + + assert_send::>(); + assert_sync::>(); +} diff --git a/src/tests/mod.rs b/src/tests/mod.rs index 81046942..b578b6d8 100644 --- a/src/tests/mod.rs +++ b/src/tests/mod.rs @@ -721,3 +721,5 @@ where pub(crate) fn assert_send() {} pub(crate) fn assert_sync() {} pub(crate) fn assert_unpin() {} + +pub(crate) struct NotSendSync(*const ());