Struct vector::sinks::prelude::ServiceBuilder
pub struct ServiceBuilder<L> { /* private fields */ }
Expand description
Declaratively construct Service
values.
ServiceBuilder
provides a builder-like interface for composing
layers to be applied to a Service
.
§Service
A Service
is a trait representing an asynchronous function of a request
to a response. It is similar to async fn(Request) -> Result<Response, Error>
.
A Service
is typically bound to a single transport, such as a TCP
connection. It defines how all inbound or outbound requests are handled
by that connection.
§Order
The order in which layers are added impacts how requests are handled. Layers
that are added first will be called with the request first. The argument to
service
will be last to see the request.
ServiceBuilder::new()
.buffer(100)
.concurrency_limit(10)
.service(svc)
In the above example, the buffer layer receives the request first followed
by concurrency_limit
. buffer
enables up to 100 request to be in-flight
on top of the requests that have already been forwarded to the next
layer. Combined with concurrency_limit
, this allows up to 110 requests to be
in-flight.
ServiceBuilder::new()
.concurrency_limit(10)
.buffer(100)
.service(svc)
The above example is similar, but the order of layers is reversed. Now,
concurrency_limit
applies first and only allows 10 requests to be in-flight
total.
§Examples
A Service
stack with a single layer:
ServiceBuilder::new()
.concurrency_limit(5)
.service(svc);
A Service
stack with multiple layers that contain rate limiting,
in-flight request limits, and a channel-backed, clonable Service
:
ServiceBuilder::new()
.buffer(5)
.concurrency_limit(5)
.rate_limit(5, Duration::from_secs(1))
.service(svc);
Implementations§
§impl ServiceBuilder<Identity>
impl ServiceBuilder<Identity>
pub fn new() -> ServiceBuilder<Identity>
pub fn new() -> ServiceBuilder<Identity>
Create a new ServiceBuilder
.
§impl<L> ServiceBuilder<L>
impl<L> ServiceBuilder<L>
pub fn layer<T>(self, layer: T) -> ServiceBuilder<Stack<T, L>>
pub fn layer<T>(self, layer: T) -> ServiceBuilder<Stack<T, L>>
Add a new layer T
into the ServiceBuilder
.
This wraps the inner service with the service provided by a user-defined
Layer
. The provided layer must implement the Layer
trait.
pub fn option_layer<T>(
self,
layer: Option<T>,
) -> ServiceBuilder<Stack<Either<T, Identity>, L>>
pub fn option_layer<T>( self, layer: Option<T>, ) -> ServiceBuilder<Stack<Either<T, Identity>, L>>
Optionally add a new layer T
into the ServiceBuilder
.
// Apply a timeout if configured
ServiceBuilder::new()
.option_layer(timeout.map(TimeoutLayer::new))
.service(svc)
pub fn layer_fn<F>(self, f: F) -> ServiceBuilder<Stack<LayerFn<F>, L>>
pub fn layer_fn<F>(self, f: F) -> ServiceBuilder<Stack<LayerFn<F>, L>>
Add a [Layer
] built from a function that accepts a service and returns another service.
See the documentation for layer_fn
for more details.
pub fn buffer<Request>(
self,
bound: usize,
) -> ServiceBuilder<Stack<BufferLayer<Request>, L>>
pub fn buffer<Request>( self, bound: usize, ) -> ServiceBuilder<Stack<BufferLayer<Request>, L>>
Buffer requests when the next layer is not ready.
This wraps the inner service with an instance of the Buffer
middleware.
pub fn concurrency_limit(
self,
max: usize,
) -> ServiceBuilder<Stack<ConcurrencyLimitLayer, L>>
pub fn concurrency_limit( self, max: usize, ) -> ServiceBuilder<Stack<ConcurrencyLimitLayer, L>>
Limit the max number of in-flight requests.
A request is in-flight from the time the request is received until the response future completes. This includes the time spent in the next layers.
This wraps the inner service with an instance of the
ConcurrencyLimit
middleware.
pub fn rate_limit(
self,
num: u64,
per: Duration,
) -> ServiceBuilder<Stack<RateLimitLayer, L>>
pub fn rate_limit( self, num: u64, per: Duration, ) -> ServiceBuilder<Stack<RateLimitLayer, L>>
Limit requests to at most num
per the given duration.
This wraps the inner service with an instance of the RateLimit
middleware.
pub fn retry<P>(self, policy: P) -> ServiceBuilder<Stack<RetryLayer<P>, L>>
pub fn retry<P>(self, policy: P) -> ServiceBuilder<Stack<RetryLayer<P>, L>>
Retry failed requests according to the given retry policy.
policy
determines which failed requests will be retried. It must
implement the retry::Policy
trait.
This wraps the inner service with an instance of the Retry
middleware.
pub fn timeout(
self,
timeout: Duration,
) -> ServiceBuilder<Stack<TimeoutLayer, L>>
pub fn timeout( self, timeout: Duration, ) -> ServiceBuilder<Stack<TimeoutLayer, L>>
Fail requests that take longer than timeout
.
If the next layer takes more than timeout
to respond to a request,
processing is terminated and an error is returned.
This wraps the inner service with an instance of the timeout
middleware.
pub fn filter<P>(self, predicate: P) -> ServiceBuilder<Stack<FilterLayer<P>, L>>
pub fn filter<P>(self, predicate: P) -> ServiceBuilder<Stack<FilterLayer<P>, L>>
pub fn filter_async<P>(
self,
predicate: P,
) -> ServiceBuilder<Stack<AsyncFilterLayer<P>, L>>
pub fn filter_async<P>( self, predicate: P, ) -> ServiceBuilder<Stack<AsyncFilterLayer<P>, L>>
Conditionally reject requests based on an asynchronous predicate
.
predicate
must implement the AsyncPredicate
trait.
This wraps the inner service with an instance of the AsyncFilter
middleware.
pub fn map_request<F, R1, R2>(
self,
f: F,
) -> ServiceBuilder<Stack<MapRequestLayer<F>, L>>
pub fn map_request<F, R1, R2>( self, f: F, ) -> ServiceBuilder<Stack<MapRequestLayer<F>, L>>
Map one request type to another.
This wraps the inner service with an instance of the MapRequest
middleware.
§Examples
Changing the type of a request:
use tower::ServiceBuilder;
use tower::ServiceExt;
// Suppose we have some `Service` whose request type is `String`:
let string_svc = tower::service_fn(|request: String| async move {
println!("request: {}", request);
Ok(())
});
// ...but we want to call that service with a `usize`. What do we do?
let usize_svc = ServiceBuilder::new()
// Add a middlware that converts the request type to a `String`:
.map_request(|request: usize| format!("{}", request))
// ...and wrap the string service with that middleware:
.service(string_svc);
// Now, we can call that service with a `usize`:
usize_svc.oneshot(42).await?;
Modifying the request value:
use tower::ServiceBuilder;
use tower::ServiceExt;
// A service that takes a number and returns it:
let svc = tower::service_fn(|request: usize| async move {
Ok(request)
});
let svc = ServiceBuilder::new()
// Add a middleware that adds 1 to each request
.map_request(|request: usize| request + 1)
.service(svc);
let response = svc.oneshot(1).await?;
assert_eq!(response, 2);
pub fn map_response<F>(
self,
f: F,
) -> ServiceBuilder<Stack<MapResponseLayer<F>, L>>
pub fn map_response<F>( self, f: F, ) -> ServiceBuilder<Stack<MapResponseLayer<F>, L>>
Map one response type to another.
This wraps the inner service with an instance of the MapResponse
middleware.
See the documentation for the map_response
combinator for details.
pub fn map_err<F>(self, f: F) -> ServiceBuilder<Stack<MapErrLayer<F>, L>>
pub fn map_err<F>(self, f: F) -> ServiceBuilder<Stack<MapErrLayer<F>, L>>
Map one error type to another.
This wraps the inner service with an instance of the MapErr
middleware.
See the documentation for the map_err
combinator for details.
pub fn map_future<F>(self, f: F) -> ServiceBuilder<Stack<MapFutureLayer<F>, L>>
pub fn map_future<F>(self, f: F) -> ServiceBuilder<Stack<MapFutureLayer<F>, L>>
Composes a function that transforms futures produced by the service.
This wraps the inner service with an instance of the MapFutureLayer
middleware.
See the documentation for the map_future
combinator for details.
pub fn then<F>(self, f: F) -> ServiceBuilder<Stack<ThenLayer<F>, L>>
pub fn then<F>(self, f: F) -> ServiceBuilder<Stack<ThenLayer<F>, L>>
Apply an asynchronous function after the service, regardless of whether the future succeeds or fails.
This wraps the inner service with an instance of the Then
middleware.
This is similar to the map_response
and map_err
functions,
except that the same function is invoked when the service’s future
completes, whether it completes successfully or fails. This function
takes the Result
returned by the service’s future, and returns a
Result
.
See the documentation for the then
combinator for details.
pub fn and_then<F>(self, f: F) -> ServiceBuilder<Stack<AndThenLayer<F>, L>>
pub fn and_then<F>(self, f: F) -> ServiceBuilder<Stack<AndThenLayer<F>, L>>
Executes a new future after this service’s future resolves. This does
not alter the behaviour of the poll_ready
method.
This method can be used to change the Response
type of the service
into a different type. You can use this method to chain along a computation once the
service’s response has been resolved.
This wraps the inner service with an instance of the AndThen
middleware.
See the documentation for the and_then
combinator for details.
pub fn map_result<F>(self, f: F) -> ServiceBuilder<Stack<MapResultLayer<F>, L>>
pub fn map_result<F>(self, f: F) -> ServiceBuilder<Stack<MapResultLayer<F>, L>>
Maps this service’s result type (Result<Self::Response, Self::Error>
)
to a different value, regardless of whether the future succeeds or
fails.
This wraps the inner service with an instance of the MapResult
middleware.
See the documentation for the map_result
combinator for details.
pub fn into_inner(self) -> L
pub fn into_inner(self) -> L
Returns the underlying Layer
implementation.
pub fn service<S>(&self, service: S) -> <L as Layer<S>>::Servicewhere
L: Layer<S>,
pub fn service<S>(&self, service: S) -> <L as Layer<S>>::Servicewhere
L: Layer<S>,
Wrap the service S
with the middleware provided by this
ServiceBuilder
’s Layer
’s, returning a new Service
.
pub fn service_fn<F>(self, f: F) -> <L as Layer<ServiceFn<F>>>::Servicewhere
L: Layer<ServiceFn<F>>,
pub fn service_fn<F>(self, f: F) -> <L as Layer<ServiceFn<F>>>::Servicewhere
L: Layer<ServiceFn<F>>,
Wrap the async function F
with the middleware provided by this ServiceBuilder
’s
Layer
s, returning a new Service
.
This is a convenience method which is equivalent to calling
ServiceBuilder::service
with a service_fn
, like this:
ServiceBuilder::new()
// ...
.service(service_fn(handler_fn))
§Example
use std::time::Duration;
use tower::{ServiceBuilder, ServiceExt, BoxError, service_fn};
async fn handle(request: &'static str) -> Result<&'static str, BoxError> {
Ok(request)
}
let svc = ServiceBuilder::new()
.buffer(1024)
.timeout(Duration::from_secs(10))
.service_fn(handle);
let response = svc.oneshot("foo").await?;
assert_eq!(response, "foo");
pub fn check_clone(self) -> ServiceBuilder<L>where
ServiceBuilder<L>: Clone,
pub fn check_clone(self) -> ServiceBuilder<L>where
ServiceBuilder<L>: Clone,
Check that the builder implements Clone
.
This can be useful when debugging type errors in ServiceBuilder
s with lots of layers.
Doesn’t actually change the builder but serves as a type check.
§Example
use tower::ServiceBuilder;
let builder = ServiceBuilder::new()
// Do something before processing the request
.map_request(|request: String| {
println!("got request!");
request
})
// Ensure our `ServiceBuilder` can be cloned
.check_clone()
// Do something after processing the request
.map_response(|response: String| {
println!("got response!");
response
});
pub fn check_service_clone<S>(self) -> ServiceBuilder<L>where
L: Layer<S>,
<L as Layer<S>>::Service: Clone,
pub fn check_service_clone<S>(self) -> ServiceBuilder<L>where
L: Layer<S>,
<L as Layer<S>>::Service: Clone,
Check that the builder when given a service of type S
produces a service that implements
Clone
.
This can be useful when debugging type errors in ServiceBuilder
s with lots of layers.
Doesn’t actually change the builder but serves as a type check.
§Example
use tower::ServiceBuilder;
let builder = ServiceBuilder::new()
// Do something before processing the request
.map_request(|request: String| {
println!("got request!");
request
})
// Ensure that the service produced when given a `MyService` implements
.check_service_clone::<MyService>()
// Do something after processing the request
.map_response(|response: String| {
println!("got response!");
response
});
pub fn check_service<S, T, U, E>(self) -> ServiceBuilder<L>where
L: Layer<S>,
<L as Layer<S>>::Service: Service<T, Response = U, Error = E>,
pub fn check_service<S, T, U, E>(self) -> ServiceBuilder<L>where
L: Layer<S>,
<L as Layer<S>>::Service: Service<T, Response = U, Error = E>,
Check that the builder when given a service of type S
produces a service with the given
request, response, and error types.
This can be useful when debugging type errors in ServiceBuilder
s with lots of layers.
Doesn’t actually change the builder but serves as a type check.
§Example
use tower::ServiceBuilder;
use std::task::{Poll, Context};
use tower::{Service, ServiceExt};
// An example service
struct MyService;
impl Service<Request> for MyService {
type Response = Response;
type Error = Error;
type Future = futures_util::future::Ready<Result<Response, Error>>;
fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
// ...
}
fn call(&mut self, request: Request) -> Self::Future {
// ...
}
}
struct Request;
struct Response;
struct Error;
struct WrappedResponse(Response);
let builder = ServiceBuilder::new()
// At this point in the builder if given a `MyService` it produces a service that
// accepts `Request`s, produces `Response`s, and fails with `Error`s
.check_service::<MyService, Request, Response, Error>()
// Wrap responses in `WrappedResponse`
.map_response(|response: Response| WrappedResponse(response))
// Now the response type will be `WrappedResponse`
.check_service::<MyService, _, WrappedResponse, _>();
pub fn boxed<S, R>(
self,
) -> ServiceBuilder<Stack<LayerFn<fn(_: <L as Layer<S>>::Service) -> BoxService<R, <<L as Layer<S>>::Service as Service<R>>::Response, <<L as Layer<S>>::Service as Service<R>>::Error>>, L>>
pub fn boxed<S, R>( self, ) -> ServiceBuilder<Stack<LayerFn<fn(_: <L as Layer<S>>::Service) -> BoxService<R, <<L as Layer<S>>::Service as Service<R>>::Response, <<L as Layer<S>>::Service as Service<R>>::Error>>, L>>
This wraps the inner service with the [Layer
] returned by BoxService::layer()
.
See that method for more details.
§Example
use tower::{Service, ServiceBuilder, BoxError, util::BoxService};
use std::time::Duration;
let service: BoxService<Request, Response, BoxError> = ServiceBuilder::new()
.boxed()
.load_shed()
.concurrency_limit(64)
.timeout(Duration::from_secs(10))
.service_fn(|req: Request| async {
Ok::<_, BoxError>(Response::new())
});
pub fn boxed_clone<S, R>(
self,
) -> ServiceBuilder<Stack<LayerFn<fn(_: <L as Layer<S>>::Service) -> BoxCloneService<R, <<L as Layer<S>>::Service as Service<R>>::Response, <<L as Layer<S>>::Service as Service<R>>::Error>>, L>>
pub fn boxed_clone<S, R>( self, ) -> ServiceBuilder<Stack<LayerFn<fn(_: <L as Layer<S>>::Service) -> BoxCloneService<R, <<L as Layer<S>>::Service as Service<R>>::Response, <<L as Layer<S>>::Service as Service<R>>::Error>>, L>>
This wraps the inner service with the [Layer
] returned by BoxCloneService::layer()
.
This is similar to the boxed
method, but it requires that Self
implement
Clone
, and the returned boxed service implements Clone
.
See BoxCloneService
for more details.
§Example
use tower::{Service, ServiceBuilder, BoxError, util::BoxCloneService};
use std::time::Duration;
let service: BoxCloneService<Request, Response, BoxError> = ServiceBuilder::new()
.boxed_clone()
.load_shed()
.concurrency_limit(64)
.timeout(Duration::from_secs(10))
.service_fn(|req: Request| async {
Ok::<_, BoxError>(Response::new())
});
// The boxed service can still be cloned.
service.clone();
Trait Implementations§
§impl<L> Clone for ServiceBuilder<L>where
L: Clone,
impl<L> Clone for ServiceBuilder<L>where
L: Clone,
§fn clone(&self) -> ServiceBuilder<L>
fn clone(&self) -> ServiceBuilder<L>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more§impl<L> Debug for ServiceBuilder<L>where
L: Debug,
impl<L> Debug for ServiceBuilder<L>where
L: Debug,
§impl Default for ServiceBuilder<Identity>
impl Default for ServiceBuilder<Identity>
§fn default() -> ServiceBuilder<Identity>
fn default() -> ServiceBuilder<Identity>
§impl<S, L> Layer<S> for ServiceBuilder<L>where
L: Layer<S>,
impl<S, L> Layer<S> for ServiceBuilder<L>where
L: Layer<S>,
§fn layer(&self, inner: S) -> <ServiceBuilder<L> as Layer<S>>::Service
fn layer(&self, inner: S) -> <ServiceBuilder<L> as Layer<S>>::Service
source§impl<L> ServiceBuilderExt<L> for ServiceBuilder<L>
impl<L> ServiceBuilderExt<L> for ServiceBuilder<L>
fn map<R1, R2, F>(self, f: F) -> ServiceBuilder<Stack<MapLayer<R1, R2>, L>>
fn settings<RL, Request>( self, settings: TowerRequestSettings, retry_logic: RL, ) -> ServiceBuilder<Stack<TowerRequestLayer<RL, Request>, L>>
Auto Trait Implementations§
impl<L> Freeze for ServiceBuilder<L>where
L: Freeze,
impl<L> RefUnwindSafe for ServiceBuilder<L>where
L: RefUnwindSafe,
impl<L> Send for ServiceBuilder<L>where
L: Send,
impl<L> Sync for ServiceBuilder<L>where
L: Sync,
impl<L> Unpin for ServiceBuilder<L>where
L: Unpin,
impl<L> UnwindSafe for ServiceBuilder<L>where
L: UnwindSafe,
Blanket Implementations§
§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
§type ArchivedMetadata = ()
type ArchivedMetadata = ()
§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
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,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§impl<T> Conv for T
impl<T> Conv for T
§impl<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
§fn deserialize(
&self,
deserializer: &mut D,
) -> Result<With<T, W>, <D as Fallible>::Error>
fn deserialize( &self, deserializer: &mut D, ) -> Result<With<T, W>, <D as Fallible>::Error>
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<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> 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> 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
§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
§impl<Source, Target> OctetsInto<Target> for Sourcewhere
Target: OctetsFrom<Source>,
impl<Source, Target> OctetsInto<Target> for Sourcewhere
Target: OctetsFrom<Source>,
type Error = <Target as OctetsFrom<Source>>::Error
§fn try_octets_into(
self,
) -> Result<Target, <Source as OctetsInto<Target>>::Error>
fn try_octets_into( self, ) -> Result<Target, <Source as OctetsInto<Target>>::Error>
§fn octets_into(self) -> Targetwhere
Self::Error: Into<Infallible>,
fn octets_into(self) -> Targetwhere
Self::Error: Into<Infallible>,
§impl<D> OwoColorize for D
impl<D> OwoColorize for D
§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg
] or
a color-specific method, such as [OwoColorize::green
], Read more§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg
] or
a color-specific method, such as [OwoColorize::on_yellow
], Read more§fn fg_rgb<const R: u8, const G: u8, const B: u8>(
&self,
) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>
fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>
§fn bg_rgb<const R: u8, const G: u8, const B: u8>(
&self,
) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>
fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>
§fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>
fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>
§fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>
fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>
§fn if_supports_color<'a, Out, ApplyFn>(
&'a self,
stream: impl Into<Stream>,
apply: ApplyFn,
) -> SupportsColorsDisplay<'a, Self, Out, ApplyFn>where
ApplyFn: Fn(&'a Self) -> Out,
fn if_supports_color<'a, Out, ApplyFn>(
&'a self,
stream: impl Into<Stream>,
apply: ApplyFn,
) -> SupportsColorsDisplay<'a, Self, Out, ApplyFn>where
ApplyFn: Fn(&'a Self) -> Out,
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.