pub struct TenantMiddleware<Svc, S, R> { /* private fields */ }Expand description
Tower Service that resolves the tenant on every request.
On each request this service:
- Calls the
TenantStrategyto extract acrate::tenant::TenantId. - Calls the
TenantResolverto obtain the concrete tenant value. - Records
tenant_idin the current tracing span viaSpan::current().record(). - Inserts the resolved tenant as
Arc<T>into request extensions.
For step 3 to take effect the enclosing tracing span must declare
tenant_id = tracing::field::Empty — spans created without that field
silently ignore the record() call.
Errors at either step are converted to HTTP responses via IntoResponse
and returned immediately without calling the inner service.
Trait Implementations§
Source§impl<Svc: Clone, S, R> Clone for TenantMiddleware<Svc, S, R>
impl<Svc: Clone, S, R> Clone for TenantMiddleware<Svc, S, R>
Source§impl<Svc, S, R> Service<Request<Body>> for TenantMiddleware<Svc, S, R>
impl<Svc, S, R> Service<Request<Body>> for TenantMiddleware<Svc, S, R>
Source§type Future = Pin<Box<dyn Future<Output = Result<<TenantMiddleware<Svc, S, R> as Service<Request<Body>>>::Response, <TenantMiddleware<Svc, S, R> as Service<Request<Body>>>::Error>> + Send>>
type Future = Pin<Box<dyn Future<Output = Result<<TenantMiddleware<Svc, S, R> as Service<Request<Body>>>::Response, <TenantMiddleware<Svc, S, R> as Service<Request<Body>>>::Error>> + Send>>
The future response value.
Auto Trait Implementations§
impl<Svc, S, R> Freeze for TenantMiddleware<Svc, S, R>where
Svc: Freeze,
impl<Svc, S, R> RefUnwindSafe for TenantMiddleware<Svc, S, R>
impl<Svc, S, R> Send for TenantMiddleware<Svc, S, R>
impl<Svc, S, R> Sync for TenantMiddleware<Svc, S, R>
impl<Svc, S, R> Unpin for TenantMiddleware<Svc, S, R>where
Svc: Unpin,
impl<Svc, S, R> UnsafeUnpin for TenantMiddleware<Svc, S, R>where
Svc: UnsafeUnpin,
impl<Svc, S, R> UnwindSafe for TenantMiddleware<Svc, S, R>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<S, R> ServiceExt<R> for Swhere
S: Service<R>,
impl<S, R> ServiceExt<R> for Swhere
S: Service<R>,
Source§fn into_make_service(self) -> IntoMakeService<S>
fn into_make_service(self) -> IntoMakeService<S>
Convert this service into a
MakeService, that is a Service whose
response is another service. Read moreSource§fn into_make_service_with_connect_info<C>(
self,
) -> IntoMakeServiceWithConnectInfo<S, C>
fn into_make_service_with_connect_info<C>( self, ) -> IntoMakeServiceWithConnectInfo<S, C>
Convert this service into a
MakeService, that will store C’s
associated ConnectInfo in a request extension such that ConnectInfo
can extract it. Read moreSource§fn handle_error<F, T>(self, f: F) -> HandleError<Self, F, T>
fn handle_error<F, T>(self, f: F) -> HandleError<Self, F, T>
Convert this service into a
HandleError, that will handle errors
by converting them into responses. Read moreSource§impl<T, Request> ServiceExt<Request> for T
impl<T, Request> ServiceExt<Request> for T
Source§fn ready(&mut self) -> Ready<'_, Self, Request>where
Self: Sized,
fn ready(&mut self) -> Ready<'_, Self, Request>where
Self: Sized,
Yields a mutable reference to the service when it is ready to accept a request.
Source§fn ready_oneshot(self) -> ReadyOneshot<Self, Request>where
Self: Sized,
fn ready_oneshot(self) -> ReadyOneshot<Self, Request>where
Self: Sized,
Yields the service when it is ready to accept a request.
Source§fn oneshot(self, req: Request) -> Oneshot<Self, Request>where
Self: Sized,
fn oneshot(self, req: Request) -> Oneshot<Self, Request>where
Self: Sized,
Consume this
Service, calling it with the provided request once it is ready.Source§fn and_then<F>(self, f: F) -> AndThen<Self, F>
fn and_then<F>(self, f: F) -> AndThen<Self, F>
Executes a new future after this service’s future resolves. This does
not alter the behaviour of the
poll_ready method. Read moreSource§fn map_response<F, Response>(self, f: F) -> MapResponse<Self, F>
fn map_response<F, Response>(self, f: F) -> MapResponse<Self, F>
Maps this service’s response value to a different value. This does not
alter the behaviour of the
poll_ready method. Read moreSource§fn map_err<F, Error>(self, f: F) -> MapErr<Self, F>
fn map_err<F, Error>(self, f: F) -> MapErr<Self, F>
Maps this service’s error value to a different value. This does not
alter the behaviour of the
poll_ready method. Read moreSource§fn map_result<F, Response, Error>(self, f: F) -> MapResult<Self, F>
fn map_result<F, Response, Error>(self, f: F) -> MapResult<Self, F>
Maps this service’s result type (
Result<Self::Response, Self::Error>)
to a different value, regardless of whether the future succeeds or
fails. Read moreSource§fn map_request<F, NewRequest>(self, f: F) -> MapRequest<Self, F>
fn map_request<F, NewRequest>(self, f: F) -> MapRequest<Self, F>
Composes a function in front of the service. Read more
Source§fn then<F, Response, Error, Fut>(self, f: F) -> Then<Self, F>
fn then<F, Response, Error, Fut>(self, f: F) -> Then<Self, F>
Composes an asynchronous function after this service. Read more
Source§fn map_future<F, Fut, Response, Error>(self, f: F) -> MapFuture<Self, F>
fn map_future<F, Fut, Response, Error>(self, f: F) -> MapFuture<Self, F>
Composes a function that transforms futures produced by the service. Read more