Struct ProxyRoutesConnector
#[non_exhaustive]pub struct ProxyRoutesConnector<S> { /* private fields */ }net only.Expand description
Try ordered proxy routes until a connection is established.
Every route receives an isolated Fork of the original input with the
selected ProxyRoute inserted into its extensions. A transport-domain
unavailable or timeout failure advances to any next configured route.
Explicit rejection, protocol, and other transport failures advance only to
another proxy route, never to a direct route. Authentication, invalid-input,
and internal failures stop fallback even in the transport domain.
Application, local, and unclassified failures also stop immediately because
another transport route should not normally change their outcome. This lets
proxy-specific failures rotate without turning an intentional rejection into
an implicit direct-origin fallback. If multiple attempted routes fail, their
contextualized errors are retained in a ProxyRouteConnectError.
Input route decisions use extension insertion order: the most recently
inserted ProxyRoute or ProxyRoutes wins. Configure default or
authoritative plans on ProxyRoutesLayer, before route-aware middleware,
so every consumer observes the same selected route.
Implementations§
§impl<S> ProxyRoutesConnector<S>
impl<S> ProxyRoutesConnector<S>
pub const fn new(inner: S) -> ProxyRoutesConnector<S>
pub const fn new(inner: S) -> ProxyRoutesConnector<S>
Create a connector that reads routes from the input extensions.
pub fn with_timeout(self, timeout: Duration) -> ProxyRoutesConnector<S>
pub fn with_timeout(self, timeout: Duration) -> ProxyRoutesConnector<S>
Limit the complete ordered-route operation to timeout.
This is distinct from a timeout applied to the inner connector: an
inner timeout applies to one route and can advance to the next route,
while this budget covers every route and stops the operation when it is
exhausted. Failures completed before the budget expired remain available
through ProxyRouteConnectError.
pub fn set_timeout(&mut self, timeout: Duration) -> &mut ProxyRoutesConnector<S>
pub fn set_timeout(&mut self, timeout: Duration) -> &mut ProxyRoutesConnector<S>
Limit the complete ordered-route operation to timeout.
This is distinct from a timeout applied to the inner connector: an
inner timeout applies to one route and can advance to the next route,
while this budget covers every route and stops the operation when it is
exhausted. Failures completed before the budget expired remain available
through ProxyRouteConnectError.
pub fn into_inner(self) -> S
pub fn into_inner(self) -> S
Consumes self, returning the underlying service.
Trait Implementations§
§impl<S> Clone for ProxyRoutesConnector<S>where
S: Clone,
impl<S> Clone for ProxyRoutesConnector<S>where
S: Clone,
§fn clone(&self) -> ProxyRoutesConnector<S>
fn clone(&self) -> ProxyRoutesConnector<S>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more§impl<S> Debug for ProxyRoutesConnector<S>where
S: Debug,
impl<S> Debug for ProxyRoutesConnector<S>where
S: Debug,
§impl<S, Input> Service<Input> for ProxyRoutesConnector<S>
impl<S, Input> Service<Input> for ProxyRoutesConnector<S>
§type Output = EstablishedClientConnection<<S as ConnectorService<Input>>::Connection, Input>
type Output = EstablishedClientConnection<<S as ConnectorService<Input>>::Connection, Input>
§type Error = ConnectionError
type Error = ConnectionError
§async fn serve(
&self,
input: Input,
) -> Result<<ProxyRoutesConnector<S> as Service<Input>>::Output, <ProxyRoutesConnector<S> as Service<Input>>::Error>
async fn serve( &self, input: Input, ) -> Result<<ProxyRoutesConnector<S> as Service<Input>>::Output, <ProxyRoutesConnector<S> as Service<Input>>::Error>
§fn boxed(self) -> BoxService<Input, Self::Output, Self::Error>
fn boxed(self) -> BoxService<Input, Self::Output, Self::Error>
Auto Trait Implementations§
impl<S> Freeze for ProxyRoutesConnector<S>where
S: Freeze,
impl<S> RefUnwindSafe for ProxyRoutesConnector<S>where
S: RefUnwindSafe,
impl<S> Send for ProxyRoutesConnector<S>where
S: Send,
impl<S> Sync for ProxyRoutesConnector<S>where
S: Sync,
impl<S> Unpin for ProxyRoutesConnector<S>where
S: Unpin,
impl<S> UnsafeUnpin for ProxyRoutesConnector<S>where
S: UnsafeUnpin,
impl<S> UnwindSafe for ProxyRoutesConnector<S>where
S: UnwindSafe,
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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,
§impl<S, Input, Connection> ConnectorService<Input> for Swhere
S: Service<Input, Output = EstablishedClientConnection<Connection, Input>>,
<S as Service<Input>>::Error: Into<ConnectionError>,
Connection: Send + ExtensionsRef,
impl<S, Input, Connection> ConnectorService<Input> for Swhere
S: Service<Input, Output = EstablishedClientConnection<Connection, Input>>,
<S as Service<Input>>::Error: Into<ConnectionError>,
Connection: Send + ExtensionsRef,
§type Connection = Connection
type Connection = Connection
ConnectorService§fn connect(
&self,
input: Input,
) -> impl Future<Output = Result<EstablishedClientConnection<<S as ConnectorService<Input>>::Connection, Input>, ConnectionError>> + Send
fn connect( &self, input: Input, ) -> impl Future<Output = Result<EstablishedClientConnection<<S as ConnectorService<Input>>::Connection, Input>, ConnectionError>> + Send
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§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 more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a rama_grpc::Request§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§fn and<P, B, E>(self, other: P) -> And<T, P>
fn and<P, B, E>(self, other: P) -> And<T, P>
Policy that returns Action::Follow only if self and other return
Action::Follow. Read more