pub struct PathSegmentTenantResolver { /* private fields */ }Expand description
Extracts a tenant ID from a URL path segment by index.
The path is client-controlled, so this isolates nothing on its own — it is a routing convention that a gateway or an authorising interceptor has to back up. See this module’s security section.
Path segments are split by /, with empty segments (from leading /)
removed. For example, the path /tenants/acme/tasks has segments
["tenants", "acme", "tasks"]; index 1 yields "acme".
The resolver reads the request path from the :path key in
CallContext::http_headers, which the JSON-RPC, REST and WebSocket
dispatchers set from the request URI. The gRPC dispatcher and the Axum
adapter do not set it, so there resolution always returns None; use
BearerTokenTenantResolver or HeaderTenantResolver with those.
Through 0.14.0 this resolver fell back to an ordinary path header when
:path was absent. Any client could send that header, and so choose its
own tenant (GHSA-hr9h-6jvf-wvg6); the fallback is gone.
§Example
use a2a_protocol_server::tenant_resolver::PathSegmentTenantResolver;
// Extract segment at index 1: /tenants/{id}/...
let resolver = PathSegmentTenantResolver::new(1);Implementations§
Source§impl PathSegmentTenantResolver
impl PathSegmentTenantResolver
Sourcepub const fn new(segment_index: usize) -> PathSegmentTenantResolver
pub const fn new(segment_index: usize) -> PathSegmentTenantResolver
Creates a resolver that extracts the path segment at the given index.
Index 0 is the first non-empty segment after the leading /.
Trait Implementations§
Source§impl Clone for PathSegmentTenantResolver
impl Clone for PathSegmentTenantResolver
Source§fn clone(&self) -> PathSegmentTenantResolver
fn clone(&self) -> PathSegmentTenantResolver
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for PathSegmentTenantResolver
impl Debug for PathSegmentTenantResolver
Auto Trait Implementations§
impl Freeze for PathSegmentTenantResolver
impl RefUnwindSafe for PathSegmentTenantResolver
impl Send for PathSegmentTenantResolver
impl Sync for PathSegmentTenantResolver
impl Unpin for PathSegmentTenantResolver
impl UnsafeUnpin for PathSegmentTenantResolver
impl UnwindSafe for PathSegmentTenantResolver
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
Source§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
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> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request