Struct HaProxyService
pub struct HaProxyService<S, P = Tcp, V = Two> { /* private fields */ }
Expand description
Service to encode and write the HaProxy Protocol as a client on the connected stream.
This connector should in most cases happen as the first thing after establishing the connection.
Implementations§
§impl<S> HaProxyService<S>
impl<S> HaProxyService<S>
pub fn tcp(inner: S) -> HaProxyService<S>
pub fn tcp(inner: S) -> HaProxyService<S>
Create a new HaProxyService
for the TCP protocol (default).
This is in the PROXY spec referred to as:
- TCP4 (for IPv4, v1)
- TCP6 (for IPv6, v1)
- Stream (v2)
pub fn v1(self) -> HaProxyService<S, Tcp, One>
pub fn v1(self) -> HaProxyService<S, Tcp, One>
Use version one of PROXY protocol, instead of the default version two.
Version one makes use of a less advanced text protocol, instead the more advanced binary v2 protocol.
Use this only if you have no control over a v1-only server.
§impl<S> HaProxyService<S, Udp>
impl<S> HaProxyService<S, Udp>
pub fn udp(inner: S) -> HaProxyService<S, Udp>
pub fn udp(inner: S) -> HaProxyService<S, Udp>
Create a new HaProxyService
for the UDP protocol,
instead of the default TCP protocol.
This is in the PROXY spec referred to as:
- Datagram (v2)
§impl<S, P> HaProxyService<S, P>
impl<S, P> HaProxyService<S, P>
pub fn with_payload(self, payload: impl Into<Bytes>) -> HaProxyService<S, P>
pub fn with_payload(self, payload: impl Into<Bytes>) -> HaProxyService<S, P>
Attach a custom bytes payload to the PROXY header.
NOTE this is only possible in Version two of the PROXY Protocol.
In case you downgrade this HaProxyLayer
to version one later
using Self::v1
this payload will be dropped.
pub fn set_payload(
&mut self,
payload: impl Into<Bytes>,
) -> &mut HaProxyService<S, P>
pub fn set_payload( &mut self, payload: impl Into<Bytes>, ) -> &mut HaProxyService<S, P>
Attach a custom bytes payload to the PROXY header.
NOTE this is only possible in Version two of the PROXY Protocol.
In case you downgrade this HaProxyLayer
to version one later
using Self::v1
this payload will be dropped.
Trait Implementations§
§impl<S, P, V> Clone for HaProxyService<S, P, V>
impl<S, P, V> Clone for HaProxyService<S, P, V>
§fn clone(&self) -> HaProxyService<S, P, V>
fn clone(&self) -> HaProxyService<S, P, V>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more§impl<S, P, V> Debug for HaProxyService<S, P, V>
impl<S, P, V> Debug for HaProxyService<S, P, V>
§impl<S, P, Request, T> Service<Request> for HaProxyService<S, P>
impl<S, P, Request, T> Service<Request> for HaProxyService<S, P>
§type Response = EstablishedClientConnection<T, Request>
type Response = EstablishedClientConnection<T, Request>
§async fn serve(
&self,
ctx: Context,
req: Request,
) -> Result<<HaProxyService<S, P> as Service<Request>>::Response, <HaProxyService<S, P> as Service<Request>>::Error>
async fn serve( &self, ctx: Context, req: Request, ) -> Result<<HaProxyService<S, P> as Service<Request>>::Response, <HaProxyService<S, P> as Service<Request>>::Error>
§fn boxed(self) -> BoxService<Request, Self::Response, Self::Error>
fn boxed(self) -> BoxService<Request, Self::Response, Self::Error>
§impl<S, P, Request> Service<Request> for HaProxyService<S, P, One>where
S: ConnectorService<Request>,
<S as ConnectorService<Request>>::Connection: Stream + Socket + Unpin,
<S as ConnectorService<Request>>::Error: Into<Box<dyn Error + Sync + Send>>,
P: Send + 'static,
Request: Send + 'static,
impl<S, P, Request> Service<Request> for HaProxyService<S, P, One>where
S: ConnectorService<Request>,
<S as ConnectorService<Request>>::Connection: Stream + Socket + Unpin,
<S as ConnectorService<Request>>::Error: Into<Box<dyn Error + Sync + Send>>,
P: Send + 'static,
Request: Send + 'static,
§type Response = EstablishedClientConnection<<S as ConnectorService<Request>>::Connection, Request>
type Response = EstablishedClientConnection<<S as ConnectorService<Request>>::Connection, Request>
§async fn serve(
&self,
ctx: Context,
req: Request,
) -> Result<<HaProxyService<S, P, One> as Service<Request>>::Response, <HaProxyService<S, P, One> as Service<Request>>::Error>
async fn serve( &self, ctx: Context, req: Request, ) -> Result<<HaProxyService<S, P, One> as Service<Request>>::Response, <HaProxyService<S, P, One> as Service<Request>>::Error>
§fn boxed(self) -> BoxService<Request, Self::Response, Self::Error>
fn boxed(self) -> BoxService<Request, Self::Response, Self::Error>
Auto Trait Implementations§
impl<S, P, V> Freeze for HaProxyService<S, P, V>
impl<S, P, V> RefUnwindSafe for HaProxyService<S, P, V>where
S: RefUnwindSafe,
V: RefUnwindSafe,
impl<S, P, V> Send for HaProxyService<S, P, V>
impl<S, P, V> Sync for HaProxyService<S, P, V>
impl<S, P, V> Unpin for HaProxyService<S, P, V>
impl<S, P, V> UnwindSafe for HaProxyService<S, P, V>where
S: UnwindSafe,
V: 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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<S, Request, Connection> ConnectorService<Request> for S
impl<S, Request, Connection> ConnectorService<Request> for S
§type Connection = Connection
type Connection = Connection
ConnectorService
§fn connect(
&self,
ctx: Context,
req: Request,
) -> impl Future<Output = Result<EstablishedClientConnection<<S as ConnectorService<Request>>::Connection, Request>, <S as ConnectorService<Request>>::Error>> + Send
fn connect( &self, ctx: Context, req: Request, ) -> impl Future<Output = Result<EstablishedClientConnection<<S as ConnectorService<Request>>::Connection, Request>, <S as ConnectorService<Request>>::Error>> + 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<S, Body> HttpClientExt for S
impl<S, Body> HttpClientExt for S
§type ExecuteResponse = Response<Body>
type ExecuteResponse = Response<Body>
execute
method.§type ExecuteError = <S as Service<Request<Body>>>::Error
type ExecuteError = <S as Service<Request<Body>>>::Error
execute
method.§fn get(
&self,
url: impl IntoUrl,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn get( &self, url: impl IntoUrl, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
GET
request to a URL. Read more§fn post(
&self,
url: impl IntoUrl,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn post( &self, url: impl IntoUrl, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
POST
request to a URL. Read more§fn put(
&self,
url: impl IntoUrl,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn put( &self, url: impl IntoUrl, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
PUT
request to a URL. Read more§fn patch(
&self,
url: impl IntoUrl,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn patch( &self, url: impl IntoUrl, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
PATCH
request to a URL. Read more§fn delete(
&self,
url: impl IntoUrl,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn delete( &self, url: impl IntoUrl, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
DELETE
request to a URL. Read more§fn head(
&self,
url: impl IntoUrl,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn head( &self, url: impl IntoUrl, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
HEAD
request to a URL. Read more§fn connect(
&self,
url: impl IntoUrl,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn connect( &self, url: impl IntoUrl, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
CONNECT
request to a URL. Read more§fn request(
&self,
method: Method,
url: impl IntoUrl,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn request( &self, method: Method, url: impl IntoUrl, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
§fn build_from_request<RequestBody>(
&self,
request: Request<RequestBody>,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn build_from_request<RequestBody>( &self, request: Request<RequestBody>, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
§fn execute(
&self,
ctx: Context,
request: Request<Body>,
) -> impl Future<Output = Result<<S as HttpClientExt>::ExecuteResponse, <S as HttpClientExt>::ExecuteError>>
fn execute( &self, ctx: Context, request: Request<Body>, ) -> impl Future<Output = Result<<S as HttpClientExt>::ExecuteResponse, <S as HttpClientExt>::ExecuteError>>
Request
. Read more§impl<S, Body> HttpClientWebSocketExt<Body> for S
impl<S, Body> HttpClientWebSocketExt<Body> for S
§fn websocket(
&self,
url: impl IntoUrl,
) -> WebSocketRequestBuilder<WithService<'_, S, Body>>
fn websocket( &self, url: impl IntoUrl, ) -> WebSocketRequestBuilder<WithService<'_, S, Body>>
WebSocketRequestBuilder
] to be used to establish a WebSocket connection over http/1.1.§fn websocket_h2(
&self,
url: impl IntoUrl,
) -> WebSocketRequestBuilder<WithService<'_, S, Body>>
fn websocket_h2( &self, url: impl IntoUrl, ) -> WebSocketRequestBuilder<WithService<'_, S, Body>>
WebSocketRequestBuilder
to be used to establish a WebSocket connection over h2.§fn websocket_with_request<RequestBody>(
&self,
req: Request<RequestBody>,
) -> WebSocketRequestBuilder<WithService<'_, S, Body>>
fn websocket_with_request<RequestBody>( &self, req: Request<RequestBody>, ) -> WebSocketRequestBuilder<WithService<'_, S, Body>>
WebSocketRequestBuilder
starting from the given request. Read more§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<S, R> IntoEndpointService<(R,)> for Swhere
S: Service<Request<Body>, Response = R, Error = Infallible>,
R: IntoResponse + Send + Sync + 'static,
impl<S, R> IntoEndpointService<(R,)> for Swhere
S: Service<Request<Body>, Response = R, Error = Infallible>,
R: IntoResponse + Send + Sync + 'static,
§fn into_endpoint_service(
self,
) -> impl Service<Request<Body>, Response = Response<Body>, Error = Infallible>
fn into_endpoint_service( self, ) -> impl Service<Request<Body>, Response = Response<Body>, Error = Infallible>
rama_core::Service
.§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§impl<T, U> RamaTryInto<U> for Twhere
U: RamaTryFrom<T>,
impl<T, U> RamaTryInto<U> for Twhere
U: RamaTryFrom<T>,
type Error = <U as RamaTryFrom<T>>::Error
fn rama_try_into(self) -> Result<U, <U as RamaTryFrom<T>>::Error>
§impl<T, U> RamaTryInto<U> for Twhere
U: RamaTryFrom<T>,
impl<T, U> RamaTryInto<U> for Twhere
U: RamaTryFrom<T>,
type Error = <U as RamaTryFrom<T>>::Error
fn rama_try_into(self) -> Result<U, <U as RamaTryFrom<T>>::Error>
§impl<S, RequestIn, RequestOut> RequestInspector<RequestIn> for S
impl<S, RequestIn, RequestOut> RequestInspector<RequestIn> for S
type RequestOut = RequestOut
§fn inspect_request(
&self,
ctx: Context,
req: RequestIn,
) -> impl Future<Output = Result<(Context, <S as RequestInspector<RequestIn>>::RequestOut), <S as RequestInspector<RequestIn>>::Error>> + Send
fn inspect_request( &self, ctx: Context, req: RequestIn, ) -> impl Future<Output = Result<(Context, <S as RequestInspector<RequestIn>>::RequestOut), <S as RequestInspector<RequestIn>>::Error>> + Send
§impl<S, Socket> SocketService for S
impl<S, Socket> SocketService for S
§type Socket = Socket
type Socket = Socket
SocketService