Struct ResponseWriterService
pub struct ResponseWriterService<S, W> { /* private fields */ }http and std only.Expand description
Middleware to print Http responses in std format.
Response bodies are observed while they stream to the caller. The writer receives an owned body stream and processes frames concurrently.
See the module docs for more details.
Implementations§
§impl<S, W> ResponseWriterService<S, W>
impl<S, W> ResponseWriterService<S, W>
pub fn new(writer: W, inner: S) -> ResponseWriterService<S, W>
pub fn new(writer: W, inner: S) -> ResponseWriterService<S, W>
Create a new ResponseWriterService with a custom ResponseWriter.
Use Self::new_with_executor when streaming writer tasks must participate
in graceful shutdown.
pub fn new_with_executor(
writer: W,
inner: S,
executor: Executor,
) -> ResponseWriterService<S, W>
pub fn new_with_executor( writer: W, inner: S, executor: Executor, ) -> ResponseWriterService<S, W>
Create a new ResponseWriterService with a custom ResponseWriter
and executor for streaming writer tasks.
pub fn into_inner(self) -> S
pub fn into_inner(self) -> S
Consumes self, returning the underlying service.
§impl<S> ResponseWriterService<S, UnboundedSender<Response>>
impl<S> ResponseWriterService<S, UnboundedSender<Response>>
pub fn writer_unbounded<W>(
executor: &Executor,
writer: W,
mode: Option<WriterMode>,
inner: S,
) -> ResponseWriterService<S, UnboundedSender<Response>>
pub fn writer_unbounded<W>( executor: &Executor, writer: W, mode: Option<WriterMode>, inner: S, ) -> ResponseWriterService<S, UnboundedSender<Response>>
Create a new ResponseWriterService that prints responses to an [AsyncWrite]r
over an unbounded channel
pub fn stdout_unbounded(
executor: &Executor,
mode: Option<WriterMode>,
inner: S,
) -> ResponseWriterService<S, UnboundedSender<Response>>
pub fn stdout_unbounded( executor: &Executor, mode: Option<WriterMode>, inner: S, ) -> ResponseWriterService<S, UnboundedSender<Response>>
Create a new ResponseWriterService that prints responses to stdout
over an unbounded channel.
pub fn stderr_unbounded(
executor: &Executor,
mode: Option<WriterMode>,
inner: S,
) -> ResponseWriterService<S, UnboundedSender<Response>>
pub fn stderr_unbounded( executor: &Executor, mode: Option<WriterMode>, inner: S, ) -> ResponseWriterService<S, UnboundedSender<Response>>
Create a new ResponseWriterService that prints responses to stderr
over an unbounded channel.
§impl<S> ResponseWriterService<S, PerMessageFileWriter>
impl<S> ResponseWriterService<S, PerMessageFileWriter>
pub async fn file_per_response(
executor: &Executor,
directory: impl Into<PathBuf>,
prefix: impl AsRef<str>,
mode: Option<WriterMode>,
inner: S,
) -> Result<ResponseWriterService<S, PerMessageFileWriter>, Error>
pub async fn file_per_response( executor: &Executor, directory: impl Into<PathBuf>, prefix: impl AsRef<str>, mode: Option<WriterMode>, inner: S, ) -> Result<ResponseWriterService<S, PerMessageFileWriter>, Error>
Create a service that streams every response into a unique file below
directory using the portable filename prefix.
§impl<S> ResponseWriterService<S, Sender<Response>>
impl<S> ResponseWriterService<S, Sender<Response>>
pub fn writer<W>(
executor: &Executor,
writer: W,
buffer_size: usize,
mode: Option<WriterMode>,
inner: S,
) -> ResponseWriterService<S, Sender<Response>>
pub fn writer<W>( executor: &Executor, writer: W, buffer_size: usize, mode: Option<WriterMode>, inner: S, ) -> ResponseWriterService<S, Sender<Response>>
Create a new ResponseWriterService that prints responses to an [AsyncWrite]r
over a bounded channel with a fixed buffer size.
pub fn stdout(
executor: &Executor,
buffer_size: usize,
mode: Option<WriterMode>,
inner: S,
) -> ResponseWriterService<S, Sender<Response>>
pub fn stdout( executor: &Executor, buffer_size: usize, mode: Option<WriterMode>, inner: S, ) -> ResponseWriterService<S, Sender<Response>>
Create a new ResponseWriterService that prints responses to stdout
over a bounded channel with a fixed buffer size.
pub fn stderr(
executor: &Executor,
buffer_size: usize,
mode: Option<WriterMode>,
inner: S,
) -> ResponseWriterService<S, Sender<Response>>
pub fn stderr( executor: &Executor, buffer_size: usize, mode: Option<WriterMode>, inner: S, ) -> ResponseWriterService<S, Sender<Response>>
Create a new ResponseWriterService that prints responses to stderr
over a bounded channel with a fixed buffer size.
Trait Implementations§
§impl<S, W> Clone for ResponseWriterService<S, W>
impl<S, W> Clone for ResponseWriterService<S, W>
§fn clone(&self) -> ResponseWriterService<S, W>
fn clone(&self) -> ResponseWriterService<S, W>
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, W> Debug for ResponseWriterService<S, W>where
S: Debug,
impl<S, W> Debug for ResponseWriterService<S, W>where
S: Debug,
§impl<S, W, ReqBody, ResBody> Service<Request<ReqBody>> for ResponseWriterService<S, W>
impl<S, W, ReqBody, ResBody> Service<Request<ReqBody>> for ResponseWriterService<S, W>
§async fn serve(
&self,
req: Request<ReqBody>,
) -> Result<<ResponseWriterService<S, W> as Service<Request<ReqBody>>>::Output, <ResponseWriterService<S, W> as Service<Request<ReqBody>>>::Error>
async fn serve( &self, req: Request<ReqBody>, ) -> Result<<ResponseWriterService<S, W> as Service<Request<ReqBody>>>::Output, <ResponseWriterService<S, W> as Service<Request<ReqBody>>>::Error>
§fn boxed(self) -> BoxService<Input, Self::Output, Self::Error>
fn boxed(self) -> BoxService<Input, Self::Output, Self::Error>
Auto Trait Implementations§
impl<S, W> Freeze for ResponseWriterService<S, W>where
S: Freeze,
impl<S, W> RefUnwindSafe for ResponseWriterService<S, W>where
S: RefUnwindSafe,
W: RefUnwindSafe,
impl<S, W> Send for ResponseWriterService<S, W>
impl<S, W> Sync for ResponseWriterService<S, W>
impl<S, W> Unpin for ResponseWriterService<S, W>where
S: Unpin,
impl<S, W> UnsafeUnpin for ResponseWriterService<S, W>where
S: UnsafeUnpin,
impl<S, W> UnwindSafe for ResponseWriterService<S, W>where
S: UnwindSafe,
W: RefUnwindSafe,
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<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, ReqBody, ResBody> GrpcService<ReqBody> for T
impl<T, ReqBody, ResBody> GrpcService<ReqBody> for T
§type ResponseBody = ResBody
type ResponseBody = ResBody
§fn serve(
&self,
request: Request<ReqBody>,
) -> impl Future<Output = Result<Response<<T as GrpcService<ReqBody>>::ResponseBody>, <T as GrpcService<ReqBody>>::Error>> + Send
fn serve( &self, request: Request<ReqBody>, ) -> impl Future<Output = Result<Response<<T as GrpcService<ReqBody>>::ResponseBody>, <T as GrpcService<ReqBody>>::Error>> + Send
§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>>::Error
type ExecuteError = <S as Service<Request>>::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,
request: Request,
) -> impl Future<Output = Result<<S as HttpClientExt>::ExecuteResponse, <S as HttpClientExt>::ExecuteError>>
fn execute( &self, request: Request, ) -> 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> IntoEndpointService<(S,)> for S
impl<S> IntoEndpointService<(S,)> for S
type Service = S
§fn into_endpoint_service(self) -> <S as IntoEndpointService<(S,)>>::Service
fn into_endpoint_service(self) -> <S as IntoEndpointService<(S,)>>::Service
rama_core::Service.§impl<S, State> IntoEndpointServiceWithState<(S,), State> for S
impl<S, State> IntoEndpointServiceWithState<(S,), State> for S
type Service = S
§fn into_endpoint_service_with_state(
self,
_state: State,
) -> <S as IntoEndpointServiceWithState<(S,), State>>::Service
fn into_endpoint_service_with_state( self, _state: State, ) -> <S as IntoEndpointServiceWithState<(S,), State>>::Service
rama_core::Service with state.§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