Struct FastCgiHttpClientConnector
pub struct FastCgiHttpClientConnector<S> { /* private fields */ }fastcgi and http only.Expand description
A connector that translates HTTP requests into FastCGI connections.
Wraps an inner FastCGI connector S. When called with an HTTP Request, it
maps HTTP metadata to CGI environment variables (without buffering the body —
the body becomes a streaming FastCgiBody
wrapping the original Body stream), then hands the resulting
FastCgiClientRequest to the inner connector.
§Why the conversion happens before the connection
EstablishedClientConnection<IO, Req> is generic on the request type that
flows back to the caller alongside the established IO. The inner connector
must therefore see a FastCgiClientRequest, not a Request<Body>:
- the inner connector may route on FastCGI-shaped routing extensions
(Unix-socket path per
SCRIPT_FILENAME, pool key per backend tag, …); - it allows the connector implementor to inspect / annotate the
FastCgiClientRequest::extensionsfield — a stable interface across transports — rather than HTTP-specific request parts; - the body stays a stream (no
.collect()); the conversion is essentially metadata-only, so doing it before the connect is cheap.
The returned EstablishedClientConnection carries the IO stream ready for
use with send_on or inside FastCgiHttpClient.
Implementations§
§impl<S> FastCgiHttpClientConnector<S>
impl<S> FastCgiHttpClientConnector<S>
pub fn new(inner: S) -> FastCgiHttpClientConnector<S>
pub fn new(inner: S) -> FastCgiHttpClientConnector<S>
Create a new FastCgiHttpClientConnector wrapping inner.
pub fn into_inner(self) -> S
pub fn into_inner(self) -> S
Consumes self, returning the underlying service.
Trait Implementations§
§impl<S> Clone for FastCgiHttpClientConnector<S>where
S: Clone,
impl<S> Clone for FastCgiHttpClientConnector<S>where
S: Clone,
§fn clone(&self) -> FastCgiHttpClientConnector<S>
fn clone(&self) -> FastCgiHttpClientConnector<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 FastCgiHttpClientConnector<S>where
S: Debug,
impl<S> Debug for FastCgiHttpClientConnector<S>where
S: Debug,
§impl<S, IO> Service<Request> for FastCgiHttpClientConnector<S>where
S: Service<FastCgiClientRequest, Output = EstablishedClientConnection<IO, FastCgiClientRequest>>,
<S as Service<FastCgiClientRequest>>::Error: Into<Box<dyn Error + Send + Sync>>,
IO: AsyncRead + AsyncWrite + Unpin + Send + 'static,
impl<S, IO> Service<Request> for FastCgiHttpClientConnector<S>where
S: Service<FastCgiClientRequest, Output = EstablishedClientConnection<IO, FastCgiClientRequest>>,
<S as Service<FastCgiClientRequest>>::Error: Into<Box<dyn Error + Send + Sync>>,
IO: AsyncRead + AsyncWrite + Unpin + Send + 'static,
§type Output = EstablishedClientConnection<IO, FastCgiClientRequest>
type Output = EstablishedClientConnection<IO, FastCgiClientRequest>
§async fn serve(
&self,
req: Request,
) -> Result<<FastCgiHttpClientConnector<S> as Service<Request>>::Output, <FastCgiHttpClientConnector<S> as Service<Request>>::Error>
async fn serve( &self, req: Request, ) -> Result<<FastCgiHttpClientConnector<S> as Service<Request>>::Output, <FastCgiHttpClientConnector<S> as Service<Request>>::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 FastCgiHttpClientConnector<S>where
S: Freeze,
impl<S> RefUnwindSafe for FastCgiHttpClientConnector<S>where
S: RefUnwindSafe,
impl<S> Send for FastCgiHttpClientConnector<S>where
S: Send,
impl<S> Sync for FastCgiHttpClientConnector<S>where
S: Sync,
impl<S> Unpin for FastCgiHttpClientConnector<S>where
S: Unpin,
impl<S> UnsafeUnpin for FastCgiHttpClientConnector<S>where
S: UnsafeUnpin,
impl<S> UnwindSafe for FastCgiHttpClientConnector<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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§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§impl<T, U> RamaTryFrom<T> for Uwhere
U: TryFrom<T>,
impl<T, U> RamaTryFrom<T> for Uwhere
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
fn rama_try_from(value: T) -> Result<U, <U as RamaTryFrom<T>>::Error>
§impl<T, U, CrateMarker> RamaTryInto<U, CrateMarker> for Twhere
U: RamaTryFrom<T, CrateMarker>,
impl<T, U, CrateMarker> RamaTryInto<U, CrateMarker> for Twhere
U: RamaTryFrom<T, CrateMarker>,
type Error = <U as RamaTryFrom<T, CrateMarker>>::Error
fn rama_try_into(self) -> Result<U, <U as RamaTryFrom<T, CrateMarker>>::Error>
§impl<V, F> ValueFormatter<&V> for F
impl<V, F> ValueFormatter<&V> for F
§fn format_value(writer: impl ValueWriter, value: &&V)
fn format_value(writer: impl ValueWriter, value: &&V)
value to writer§impl<V, F> ValueFormatter<Arc<V>> for F
impl<V, F> ValueFormatter<Arc<V>> for F
§fn format_value(writer: impl ValueWriter, value: &Arc<V>)
fn format_value(writer: impl ValueWriter, value: &Arc<V>)
value to writer§impl<V, F> ValueFormatter<Box<V>> for F
impl<V, F> ValueFormatter<Box<V>> for F
§fn format_value(writer: impl ValueWriter, value: &Box<V>)
fn format_value(writer: impl ValueWriter, value: &Box<V>)
value to writer§impl<V, F> ValueFormatter<Cow<'_, V>> for F
impl<V, F> ValueFormatter<Cow<'_, V>> for F
§fn format_value(writer: impl ValueWriter, value: &Cow<'_, V>)
fn format_value(writer: impl ValueWriter, value: &Cow<'_, V>)
value to writer§impl<V, F> ValueFormatter<Option<V>> for Fwhere
F: ValueFormatter<V> + ?Sized,
impl<V, F> ValueFormatter<Option<V>> for Fwhere
F: ValueFormatter<V> + ?Sized,
§fn format_value(writer: impl ValueWriter, value: &Option<V>)
fn format_value(writer: impl ValueWriter, value: &Option<V>)
value to writer