Skip to main content

Service

Struct Service 

Source
pub struct Service {
    services: Arc<OnceServices>,
    statuses: Arc<Map>,
    window_secs: u64,
    n_max: u32,
    grace: Duration,
}
Expand description

Executes outbound federation traffic and maintains peer status.

Request entry points choose whether to consult or update reachability state. Fanout and candidate-ranking helpers build on the same transport policy.

Fields§

§services: Arc<OnceServices>§statuses: Arc<Map>§window_secs: u64

Width of one peer-status bucket in seconds, aligned with sender_timeout so the streak (the window span between a peer’s oldest and newest recorded failure) tracks the sender’s consecutive_failures notion at the cutover.

§n_max: u32

Streak cap = ceil(sqrt(MAX_BACKOFF / window_secs)). Past this span the quadratic curve window * n² saturates at MAX_BACKOFF, so a longer streak cannot change the verdict.

§grace: Duration

Grace before the first retry of a once-failed peer, snapshot from sender_retry_grace. Zero disables the grace tier so the plain bucket curve governs from the first failure.

Implementations§

Source§

impl Service

Source

pub async fn execute<T>( &self, dest: &ServerName, request: T, ) -> Result<T::IncomingResponse>
where T: OutgoingRequest + Debug + Send, T::Authentication: FedAuth, T::PathBuilder: FedPath,

Sends a federation request with the standard federation client.

The destination is validated and resolved before the request is signed and sent. Success clears peer failures and classifiable errors record a failure; this entry point does not itself consult peer backoff.

Source§

impl Service

Source

pub async fn execute_keys<T>( &self, dest: &ServerName, request: T, ) -> Result<T::IncomingResponse>
where T: OutgoingRequest + Debug + Send, T::Authentication: FedAuth, T::PathBuilder: FedPath,

Sends a bounded, backoff-aware client key lookup over federation.

/keys/query and /keys/claim requests skip servers already in backoff and are limited by federation_keys_timeout. The uncounted send path deliberately records neither success, failure, nor timeout, so a slow key lookup does not suppress unrelated outbound traffic to the server.

Source§

impl Service

Source

pub async fn execute_synapse<T>( &self, dest: &ServerName, request: T, ) -> Result<T::IncomingResponse>
where T: OutgoingRequest + Debug + Send, T::Authentication: FedAuth, T::PathBuilder: FedPath,

Sends a federation request with the long-timeout Synapse client.

Resolution, signing, response decoding, and peer-status recording match super::Service::execute; only the selected HTTP client differs.

Source§

impl Service

Source

pub async fn execute_on<T>( &self, client: &Client, dest: &ServerName, request: T, ) -> Result<T::IncomingResponse>
where T: OutgoingRequest + Send, T::Authentication: FedAuth, T::PathBuilder: FedPath,

Sends through a supplied client and records the peer outcome.

A successful response clears every stored failure row for the destination. Only errors classified as peer failures are recorded, and no backoff gate is consulted before sending.

Source§

impl Service

Source

pub(super) async fn execute_on_allow_self<T>( &self, client: &Client, dest: &ServerName, request: T, ) -> Result<T::IncomingResponse>
where T: OutgoingRequest + Send, T::Authentication: FedAuth, T::PathBuilder: FedPath,

Executes one Feds request while permitting only this server as a self-destination and preserving ordinary peer-status recording.

Other federation entry points retain the configured loopback gate.

Source§

impl Service

Source

pub(super) async fn execute_uncounted<T>( &self, client: &Client, dest: &ServerName, request: T, ) -> Result<T::IncomingResponse>
where T: OutgoingRequest + Send, T::Authentication: FedAuth, T::PathBuilder: FedPath,

Sends through a supplied client without changing peer status.

Callers that gate separately can honor existing backoff without adding success or failure records.

Source§

impl Service

Source

pub(super) async fn execute_uncounted_allow_self<T>( &self, client: &Client, dest: &ServerName, request: T, ) -> Result<T::IncomingResponse>
where T: OutgoingRequest + Send, T::Authentication: FedAuth, T::PathBuilder: FedPath,

Executes one Feds request while permitting only this server as a self-destination and leaving peer status untouched.

Other federation entry points retain the configured loopback gate.

Source§

impl Service

Source

fn validate_request_destination(&self, dest: &ServerName) -> Result

Source§

impl Service

Source

async fn perform<T>( &self, actual: &ActualDest, dest: &ServerName, request: Request, client: &Client, ) -> Result<T::IncomingResponse>
where T: OutgoingRequest + Send, T::Authentication: FedAuth, T::PathBuilder: FedPath,

Source§

impl Service

Source

fn prepare<T>( &self, actual: &ActualDest, dest: &ServerName, request: T, ) -> Result<Request>
where T: OutgoingRequest + Send, T::Authentication: FedAuth, T::PathBuilder: FedPath,

Source§

impl Service

Source

fn validate_url(&self, url: &Url) -> Result

Source§

impl Service

Source

fn handle_error( &self, dest: &ServerName, actual: &ActualDest, method: &Method, url: &Url, e: Error, ) -> Result

Source§

impl Service

Source

fn evict_misrouted(&self, dest: &ServerName, actual: &ActualDest, error: &Error)

Source§

impl Service

Source

fn evict_route(&self, dest: &ServerName, actual: &ActualDest)

Source§

impl Service

Source

fn to_http_request<T>( &self, actual: &ActualDest, dest: &ServerName, request: T, ) -> Result<Request<Vec<u8>>>
where T: OutgoingRequest + Send, T::Authentication: FedAuth, T::PathBuilder: FedPath,

Source§

impl Service

Source

pub fn for_room<'a, F, R>( &'a self, room_id: &'a RoomId, make: F, opts: Opts, ) -> impl Stream<Item = Outcome<R::IncomingResponse>> + Send + 'a
where F: Fn(&ServerName) -> R + Send + 'a, R: OutgoingRequest + Send + 'a, R::IncomingResponse: Send, R::Authentication: FedAuth, R::PathBuilder: FedPath,

Surveys every server participating in a room.

The local server participates unless exclude_self removes it before the sweep. Cursor-backed server names become owned before concurrent polling.

Source§

impl Service

Source

pub fn fanout_to<'a, D, F, R>( &'a self, dests: D, make: F, opts: Opts, ) -> impl Stream<Item = Outcome<R::IncomingResponse>> + Send + 'a
where D: Stream<Item = OwnedServerName> + Send + 'a, F: Fn(&ServerName) -> R + Send + 'a, R: OutgoingRequest + Send + 'a, R::IncomingResponse: Send, R::Authentication: FedAuth, R::PathBuilder: FedPath,

Builds one request for every destination and drives the resulting pairs.

Request construction remains sequential and lazy, while only the returned federation futures are polled concurrently.

Source§

impl Service

Source

pub fn fanout<'a, S, R>( &'a self, pairs: S, opts: Opts, ) -> impl Stream<Item = Outcome<R::IncomingResponse>> + Send + 'a
where S: Stream<Item = (OwnedServerName, R)> + Send + 'a, R: OutgoingRequest + Send + 'a, R::IncomingResponse: Send, R::Authentication: FedAuth, R::PathBuilder: FedPath,

Drives arbitrary destination and federation request pairs.

Every consumed pair settles as one completion-ordered outcome unless the caller drops the stream and cancels remaining work. The selected recording posture applies independently to each request.

Source§

impl Service

Source

pub async fn format_pdu_into( &self, pdu_json: CanonicalJsonObject, room_version: Option<&RoomVersionId>, ) -> Box<RawJsonValue>

Formats an event object for an outgoing federation response.

The supplied room version takes precedence; otherwise the room ID is used to look it up. When no version can be resolved, only event_id is removed. The returned raw JSON satisfies ruma’s response type and is not a full PDU.

Source§

impl Service

Source

pub async fn record_success(&self, server: &ServerName)

Clears all recorded failures after a successful outbound request.

Removing the peer prefix makes the next attempt immediately eligible.

Source§

impl Service

Source

pub async fn note_peer_alive(&self, server: &ServerName) -> bool

Clears failure rows after a peer proves reachable through inbound activity.

The return value reports whether any rows were present, allowing the caller to flush only after a change. A healthy-peer miss writes no tombstone.

Source§

impl Service

Source

pub async fn peer_has_failures(&self, server: &ServerName) -> bool

Reports whether the reachability store holds a failure row for a peer.

Database errors are ignored and therefore behave like an empty prefix.

Source§

impl Service

Source

pub fn record_failure( &self, server: &ServerName, classification: Classification, )

Records one classified failure in the peer’s current time bucket.

Repeated failures in the same bucket overwrite the same row. The value also stores the exact failure instant while remaining compatible with old rows.

Source§

impl Service

Source

pub async fn should_attempt(&self, server: &ServerName) -> ShouldAttempt

Determines whether a federation request should currently target a peer.

A peer without readable failure rows is immediately eligible. Otherwise the verdict is derived from its newest failure and surviving bucket span.

Source§

impl Service

Source

pub async fn peer_backoff(&self, server: &ServerName) -> Option<PeerBackoff>

Returns the current admin-facing backoff summary for one server.

The result is None when the peer has no readable failure rows.

Source§

impl Service

Source

pub async fn peer_backoffs(&self) -> BTreeMap<OwnedServerName, PeerBackoff>

Returns admin-facing backoff summaries for all peers with failure rows.

The store is scanned once. Rows group by server on disk, so each contiguous run of buckets is folded in place; database errors are skipped.

Source§

impl Service

Source

pub fn peer_snapshot( &self, ) -> impl Stream<Item = (&ServerName, SystemTime, Classification)> + Send + '_

Streams one tuple per readable peer-status bucket.

Items are ordered by (server, bucket_start) for the admin snapshot table. Borrowed server names are cursor-backed and remain valid only until the next poll. Database and key-decoding errors are skipped; malformed values decode as transient failures.

Source§

impl Service

Source§

impl Service

Source

fn bucket_start(&self, bucket: u64) -> SystemTime

Wall-clock instant at the start of bucket.

Source§

impl Service

Source

fn streak(&self, latest_bucket: u64, oldest_bucket: u64) -> u32

Source§

impl Service

Source

async fn peer_streak(&self, server: &ServerName) -> Option<Streak>

Folds a server’s failure rows into its streak, None when it has none.

Source§

impl Service

Source

fn backoff(&self, run: Streak) -> Backoff

Builds the pure backoff state from a server’s failure streak.

Source§

impl Service

Source

fn peer_backoff_from(&self, streak: Streak) -> PeerBackoff

Projects a failure streak onto the admin-facing summary.

Source§

impl Service

Source

pub async fn rank_candidates( &self, eligible: Candidates, when_all: WhenAllBackedOff, ) -> Candidates

Ranks eligible candidates by current peer reachability.

The method gathers each ShouldAttempt verdict, preserves caller order within each bucket, and applies when_all only when every peer is backed off.

Trait Implementations§

Source§

impl Service for Service

Source§

fn build(args: &Args<'_>) -> Result<Arc<Self>>

Implement the construction of the service instance. Services are generally singletons so expect this to only be called once for a service type. Note that it may be called again after a server reload, but the prior instance will have been dropped first. Failure will shutdown the server with an error.
Source§

fn name(&self) -> &str

Return the name of the service. i.e. crate::service::make_name(std::module_path!())
Source§

fn worker<'async_trait>( self: Arc<Self>, ) -> Pin<Box<dyn Future<Output = Result> + Send + 'async_trait>>
where Self: 'async_trait,

Implement the service’s worker loop. The service manager spawns a task and calls this function after all services have been built.
Source§

fn interrupt<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Interrupt the service. This is sent to initiate a graceful shutdown. The service worker should return from its work loop.
Source§

fn clear_cache<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Clear any caches or similar runtime state.
Source§

fn memory_usage<'life0, 'life1, 'async_trait>( &'life0 self, _out: &'life1 mut (dyn Write + Send), ) -> Pin<Box<dyn Future<Output = Result> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Memory usage report in a markdown string.
Source§

fn unconstrained(&self) -> bool

Return true if the service worker opts out of the tokio cooperative budgeting. This can reduce tail latency at the risk of event loop starvation.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> DropFlavorWrapper<T> for T

§

type Flavor = MayDrop

The DropFlavor that [wrap]s T into Self
Source§

impl<T> ExpectInto for T

Source§

fn expect_into<Dst>(self) -> Dst
where Dst: TryFrom<Self>, Self: Sized,

Converts the value into Dst and returns the successful result. Read more
Source§

impl<T> Expected for T

Source§

fn expected_add(self, rhs: Self) -> Self
where Self: Sized + CheckedAdd,

Adds rhs with an expectation that the operation is valid. Read more
Source§

fn expected_sub(self, rhs: Self) -> Self
where Self: Sized + CheckedSub,

Subtracts rhs with an expectation that the operation is valid. Read more
Source§

fn expected_mul(self, rhs: Self) -> Self
where Self: Sized + CheckedMul,

Multiplies by rhs with an expectation that the operation is valid. Read more
Source§

fn expected_div(self, rhs: Self) -> Self
where Self: Sized + CheckedDiv,

Divides by rhs with an expectation that the operation is valid. Read more
Source§

fn expected_rem(self, rhs: Self) -> Self
where Self: Sized + CheckedRem,

Computes the remainder with an expectation that the operation is valid. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, W> HasTypeWitness<W> for T
where W: MakeTypeWitness<Arg = T>, T: ?Sized,

§

const WITNESS: W = W::MAKE

A constant of the type witness
§

impl<T> Identity for T
where T: ?Sized,

§

const TYPE_EQ: TypeEq<T, <T as Identity>::Type> = TypeEq::NEW

Proof that Self is the same type as Self::Type, provides methods for casting between Self and Self::Type.
§

type Type = T

The same type as Self, used to emulate type equality bounds (T == U) with associated type equality constraints (T: Identity<Type = U>).
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts 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> JsonCastable<CanonicalJsonValue> for T

§

impl<T> JsonCastable<Value> for T

§

impl<T> Paint for T
where T: ?Sized,

§

fn fg(&self, value: Color) -> Painted<&T>

Returns a styled value derived from self with the foreground set to value.

This method should be used rarely. Instead, prefer to use color-specific builder methods like red() and green(), which have the same functionality but are pithier.

§Example

Set foreground color to white using fg():

use yansi::{Paint, Color};

painted.fg(Color::White);

Set foreground color to white using white().

use yansi::Paint;

painted.white();
§

fn primary(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Primary].

§Example
println!("{}", value.primary());
§

fn fixed(&self, color: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Fixed].

§Example
println!("{}", value.fixed(color));
§

fn rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Rgb].

§Example
println!("{}", value.rgb(r, g, b));
§

fn black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Black].

§Example
println!("{}", value.black());
§

fn red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Red].

§Example
println!("{}", value.red());
§

fn green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Green].

§Example
println!("{}", value.green());
§

fn yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Yellow].

§Example
println!("{}", value.yellow());
§

fn blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Blue].

§Example
println!("{}", value.blue());
§

fn magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Magenta].

§Example
println!("{}", value.magenta());
§

fn cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Cyan].

§Example
println!("{}", value.cyan());
§

fn white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: White].

§Example
println!("{}", value.white());
§

fn bright_black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlack].

§Example
println!("{}", value.bright_black());
§

fn bright_red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightRed].

§Example
println!("{}", value.bright_red());
§

fn bright_green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightGreen].

§Example
println!("{}", value.bright_green());
§

fn bright_yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightYellow].

§Example
println!("{}", value.bright_yellow());
§

fn bright_blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlue].

§Example
println!("{}", value.bright_blue());
§

fn bright_magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.bright_magenta());
§

fn bright_cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightCyan].

§Example
println!("{}", value.bright_cyan());
§

fn bright_white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightWhite].

§Example
println!("{}", value.bright_white());
§

fn bg(&self, value: Color) -> Painted<&T>

Returns a styled value derived from self with the background set to value.

This method should be used rarely. Instead, prefer to use color-specific builder methods like on_red() and on_green(), which have the same functionality but are pithier.

§Example

Set background color to red using fg():

use yansi::{Paint, Color};

painted.bg(Color::Red);

Set background color to red using on_red().

use yansi::Paint;

painted.on_red();
§

fn on_primary(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Primary].

§Example
println!("{}", value.on_primary());
§

fn on_fixed(&self, color: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Fixed].

§Example
println!("{}", value.on_fixed(color));
§

fn on_rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Rgb].

§Example
println!("{}", value.on_rgb(r, g, b));
§

fn on_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Black].

§Example
println!("{}", value.on_black());
§

fn on_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Red].

§Example
println!("{}", value.on_red());
§

fn on_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Green].

§Example
println!("{}", value.on_green());
§

fn on_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Yellow].

§Example
println!("{}", value.on_yellow());
§

fn on_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Blue].

§Example
println!("{}", value.on_blue());
§

fn on_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Magenta].

§Example
println!("{}", value.on_magenta());
§

fn on_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Cyan].

§Example
println!("{}", value.on_cyan());
§

fn on_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: White].

§Example
println!("{}", value.on_white());
§

fn on_bright_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlack].

§Example
println!("{}", value.on_bright_black());
§

fn on_bright_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightRed].

§Example
println!("{}", value.on_bright_red());
§

fn on_bright_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightGreen].

§Example
println!("{}", value.on_bright_green());
§

fn on_bright_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightYellow].

§Example
println!("{}", value.on_bright_yellow());
§

fn on_bright_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlue].

§Example
println!("{}", value.on_bright_blue());
§

fn on_bright_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.on_bright_magenta());
§

fn on_bright_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightCyan].

§Example
println!("{}", value.on_bright_cyan());
§

fn on_bright_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightWhite].

§Example
println!("{}", value.on_bright_white());
§

fn attr(&self, value: Attribute) -> Painted<&T>

Enables the styling [Attribute] value.

This method should be used rarely. Instead, prefer to use attribute-specific builder methods like bold() and underline(), which have the same functionality but are pithier.

§Example

Make text bold using attr():

use yansi::{Paint, Attribute};

painted.attr(Attribute::Bold);

Make text bold using using bold().

use yansi::Paint;

painted.bold();
§

fn bold(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Bold].

§Example
println!("{}", value.bold());
§

fn dim(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Dim].

§Example
println!("{}", value.dim());
§

fn italic(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Italic].

§Example
println!("{}", value.italic());
§

fn underline(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Underline].

§Example
println!("{}", value.underline());

Returns self with the attr() set to [Attribute :: Blink].

§Example
println!("{}", value.blink());

Returns self with the attr() set to [Attribute :: RapidBlink].

§Example
println!("{}", value.rapid_blink());
§

fn invert(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Invert].

§Example
println!("{}", value.invert());
§

fn conceal(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Conceal].

§Example
println!("{}", value.conceal());
§

fn strike(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Strike].

§Example
println!("{}", value.strike());
§

fn quirk(&self, value: Quirk) -> Painted<&T>

Enables the yansi [Quirk] value.

This method should be used rarely. Instead, prefer to use quirk-specific builder methods like mask() and wrap(), which have the same functionality but are pithier.

§Example

Enable wrapping using .quirk():

use yansi::{Paint, Quirk};

painted.quirk(Quirk::Wrap);

Enable wrapping using wrap().

use yansi::Paint;

painted.wrap();
§

fn mask(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Mask].

§Example
println!("{}", value.mask());
§

fn wrap(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Wrap].

§Example
println!("{}", value.wrap());
§

fn linger(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Linger].

§Example
println!("{}", value.linger());
§

fn clear(&self) -> Painted<&T>

👎Deprecated since 1.0.1:

renamed to resetting() due to conflicts with Vec::clear(). The clear() method will be removed in a future release.

Returns self with the quirk() set to [Quirk :: Clear].

§Example
println!("{}", value.clear());
§

fn resetting(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Resetting].

§Example
println!("{}", value.resetting());
§

fn bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Bright].

§Example
println!("{}", value.bright());
§

fn on_bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: OnBright].

§Example
println!("{}", value.on_bright());
§

fn whenever(&self, value: Condition) -> Painted<&T>

Conditionally enable styling based on whether the [Condition] value applies. Replaces any previous condition.

See the crate level docs for more details.

§Example

Enable styling painted only when both stdout and stderr are TTYs:

use yansi::{Paint, Condition};

painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);
§

fn new(self) -> Painted<Self>
where Self: Sized,

Create a new [Painted] with a default [Style]. Read more
§

fn paint<S>(&self, style: S) -> Painted<&Self>
where S: Into<Style>,

Apply a style wholesale to self. Any previous style is replaced. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> ServiceExt for T

§

fn add_extension<T>(self, value: T) -> AddExtension<Self, T>
where Self: Sized,

Add some shareable value to request extensions. Read more
§

fn compression(self) -> Compression<Self>
where Self: Sized,

Compresses response bodies. Read more
§

fn decompression(self) -> Decompression<Self>
where Self: Sized,

Decompress response bodies. Read more
§

fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>
where Self: Sized,

High level tracing that classifies responses using HTTP status codes. Read more
§

fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>
where Self: Sized,

High level tracing that classifies responses using gRPC headers. Read more
§

fn follow_redirects(self) -> FollowRedirect<Self>
where Self: Sized,

Follow redirect resposes using the Standard policy. Read more
§

fn sensitive_headers( self, headers: impl IntoIterator<Item = HeaderName>, ) -> SetSensitiveRequestHeaders<SetSensitiveResponseHeaders<Self>>
where Self: Sized,

Mark headers as sensitive on both requests and responses. Read more
§

fn sensitive_request_headers( self, headers: impl IntoIterator<Item = HeaderName>, ) -> SetSensitiveRequestHeaders<Self>
where Self: Sized,

Mark headers as sensitive on requests. Read more
§

fn sensitive_response_headers( self, headers: impl IntoIterator<Item = HeaderName>, ) -> SetSensitiveResponseHeaders<Self>
where Self: Sized,

Mark headers as sensitive on responses. Read more
§

fn override_request_header<M>( self, header_name: HeaderName, make: M, ) -> SetRequestHeader<Self, M>
where Self: Sized,

Insert a header into the request. Read more
§

fn append_request_header<M>( self, header_name: HeaderName, make: M, ) -> SetRequestHeader<Self, M>
where Self: Sized,

Append a header into the request. Read more
§

fn insert_request_header_if_not_present<M>( self, header_name: HeaderName, make: M, ) -> SetRequestHeader<Self, M>
where Self: Sized,

Insert a header into the request, if the header is not already present. Read more
§

fn override_response_header<M>( self, header_name: HeaderName, make: M, ) -> SetResponseHeader<Self, M>
where Self: Sized,

Insert a header into the response. Read more
§

fn append_response_header<M>( self, header_name: HeaderName, make: M, ) -> SetResponseHeader<Self, M>
where Self: Sized,

Append a header into the response. Read more
§

fn insert_response_header_if_not_present<M>( self, header_name: HeaderName, make: M, ) -> SetResponseHeader<Self, M>
where Self: Sized,

Insert a header into the response, if the header is not already present. Read more
§

fn catch_panic(self) -> CatchPanic<Self, DefaultResponseForPanic>
where Self: Sized,

Catch panics and convert them into 500 Internal Server responses. Read more
Source§

impl<T> Tried for T

Source§

fn try_add(self, rhs: Self) -> Result<Self, Error>
where Self: Sized + CheckedAdd,

Adds rhs with checked arithmetic. Read more
Source§

fn try_sub(self, rhs: Self) -> Result<Self, Error>
where Self: Sized + CheckedSub,

Subtracts rhs with checked arithmetic. Read more
Source§

fn try_mul(self, rhs: Self) -> Result<Self, Error>
where Self: Sized + CheckedMul,

Multiplies by rhs with checked arithmetic. Read more
Source§

fn try_div(self, rhs: Self) -> Result<Self, Error>
where Self: Sized + CheckedDiv,

Divides by rhs with checked arithmetic. Read more
Source§

fn try_rem(self, rhs: Self) -> Result<Self, Error>
where Self: Sized + CheckedRem,

Computes the remainder by rhs with checked arithmetic. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more