Skip to main content

PreemptionRecord

Struct PreemptionRecord 

Source
pub struct PreemptionRecord { /* private fields */ }
Expand description

A record of all the preemptions and other scheduling events that occur during execution.

Implementations§

Source§

impl PreemptionRecord

Source

pub fn with_reserved_input(self, metadata: ReservedInputMetadata) -> Self

Preserve the source’s optional metadata on an edit. This is not a live producer certificate; unmarked/unknown input remains unmarked/unknown.

Source

pub fn reserved_input(&self) -> &ReservedInputMetadata

The exact optional standalone JSON metadata, without interpreting it.

Source

pub fn validate_replay_inputs( &self, source: &str, guest_ids: GuestIds, ) -> Result<(), RecordAdmissionRefusal>

Reconcile numbering and private-input provenance on the complete decoded record that an authoritative replay loader will install.

Source

pub fn validate_combined_reserved_inputs( &self, other: &Self, ) -> Result<(), RecordAdmissionRefusal>

Validate a combination before any endpoint or identity shortcut. A Chosen input requires the same recognized descriptor on every source. Non-Chosen edits retain their former admission and opaque metadata.

Source§

impl PreemptionRecord

Source

pub fn from_sched_events(events: Vec<SchedEvent>) -> Self

TODO: This is not ideal because PreemptionRecord shouldn’t be doing double duty as an eventlog.

Source

pub fn expired_wait_runs_charged_once(&self) -> bool

Whether the run this record came from charged a run of expired timed waits one turn (false for each wait charged, and for records that do not say).

Source

pub fn with_expired_wait_runs_charged_once(self, once: bool) -> Self

The same record, stating how the run it came from charged runs of expired timed waits.

Source

pub fn schedule_prefix(&self, len: usize) -> PreemptionRecord

The record a replay of only the first len scheduled events of this one follows: those events, and the callback checkpoints they reach.

A checkpoint names the callback that ended one of a thread’s slices and the thread’s progress there (the sum of its events’ counts, as replay counts it, callback_history::Progress). The checkpoints of threads the prefix runs, up to the progress each thread reaches in it, end the prefix’s slices where the recording did, so a replay of the prefix keeps the software-expiry turns they mark. A schedule replayed without them has no record of those turns, and its virtual time drifts from the recording’s. The scheduler runs freely after the prefix, so later checkpoints are dropped, and so are those of threads the prefix does not run, progress-0 ones included.

Progress alone places a checkpoint, so one taken at exactly the progress a thread reaches at the prefix end is kept: it ended the thread’s last slice in the prefix. Another one at the same progress, from a later callback of the same handler after other threads ran past the prefix, is kept too, and the replay applies it only when its recorded time and branch count are reached.

The thread that runs the prefix’s last event is the exception while another event follows: its checkpoints at the progress that event reaches end its slice at the prefix’s own end, which decides what runs next, so they belong to the event after the prefix and are dropped. A replay of the prefix then lets that thread run on, as it does past any event the prefix leaves out. A prefix of the whole schedule keeps the record’s checkpoints.

The per-thread histories stay whole, for the rows the checkpoints name; a schedule replay reads only the events and the checkpoints.

Source

pub fn with_schedule(&self, events: Vec<SchedEvent>) -> Option<PreemptionRecord>

The same record with events as its schedule, or None if its callback checkpoints do not fit those events (see Self::validate). For a schedule that replayed this record’s events and went on past them: its own recording keeps no checkpoints, since a replay records none, but the replayed part ended its slices where this record did.

Source

pub fn interpolate_events( &self, other: &Self, events: Vec<SchedEvent>, ) -> Result<Self, String>

Attach the metadata of two interpolation inputs to events.

The caller first reconciles the existing guest-ID, signal-copy and other option policies. An exact source schedule keeps that source’s complete record, including callback checkpoints and time jumps. Both formats must agree: a single output cannot follow two charging rules.

A genuinely mixed order has no established mapping for either source’s jumps or checkpoints, so refuse those inputs. For jump/checkpoint-free inputs, every remaining metadata field must agree. Keep those fields, but clear the per-thread priority histories, as an event-order edit follows its global stream rather than either original priority history. Host-observed failure counts must agree too; retain their warning, without claiming that an unrun edit has measured that many failures.

Source

pub fn chaos_timeslice(&self) -> Option<u64>

The --max-timeslice the run that produced this record drew under --chaos-timeslice-draw=run, if it drew one.

Source

pub fn with_chaos_timeslice(self, timeslice: Option<u64>) -> Self

The same record, stating the timeslice its run drew.

Source

pub fn with_time_skips(self, skips: Vec<TimeSkip>) -> Self

The same record, listing skips as its jumps of global time, in format 2 at least when there are any. Analyze and bisect carry a source record’s jumps into a trial schedule spliced from its prefix.

Source

pub fn with_current_format(self) -> Self

The same record in the newest format (PREEMPTION_RECORD_FORMAT), which a record from a run of this Hermit has.

Source

pub fn with_format(self, format: Option<u32>) -> Self

The same record in format (None for format 1). Analyze and bisect require one shared timing format across the recordings they read (hermit-cli’s time_skip_carry).

Source

pub fn format_version(&self) -> Option<u32>

The record’s format: None for format 1.

Source

pub fn charges_replayed_switch_ins(&self) -> bool

Whether a schedule replay of this record charges a replayed switch-in under which guest code runs (format 3 or later, SWITCH_IN_CHARGE_FORMAT).

Source

pub fn lists_its_time_skips(&self) -> bool

Whether the record lists every jump of global time its run made (format 2 or later), so that a replay makes exactly those.

Source

pub fn with_pipe_wake_latency(self, latency: Option<u64>) -> Self

The same record, stating the --pipe-wake-latency of the trials it came from. Every record analyze, minimize or bisect writes from trials carries it, so that a replay under another value is refused.

Source

pub fn pipe_wake_latency(&self) -> Option<u64>

The --pipe-wake-latency this record was produced under (None for off).

Source

pub fn epoch(&self) -> Option<DateTime<Utc>>

The virtual-time epoch this record was produced under, if it was stored.

Source

pub fn signal_state_copy(&self) -> Option<bool>

Whether the signal-state copy was on in the run this record came from, if the record says.

Source

pub fn host_inputs(&self) -> Option<&HostInputSet>

The host files the recorded run’s guest opened, if the record says.

Source

pub fn store_exclusive_failures(&self) -> u64

The store-exclusives that failed in the run this record came from (zero where none were counted).

Source

pub fn replay_departed_at(&self) -> Option<u64>

A retained source event count where a replay omitted a change point. After transformations it need not index this record’s global events.

Source

pub fn require_faithful_replay(&self) -> Result<()>

Refuse a known omission before replay or analysis can certify it. Unmarked legacy records retain their existing admission policy; their absence of this field is not proof of historical completeness.

Source

pub fn retain_replay_departure(self, source: Option<u64>) -> Self

Retain an omission observed in a source record, never clearing one. When sources differ, the smaller count is only a retained source observation: it is neither a common causal order nor an event index in a transformed output. Admission depends only on its presence.

Source

pub fn with_signal_state_copy(self, on: Option<bool>) -> Self

The same record, stating whether the copy was on in the trials it came from (None for unknown). Every record analyze, minimize or bisect writes from trials carries it, as it carries the pipe-wake latency.

Source

pub fn with_cap_preemption_charge(self, on: bool) -> Self

The same record, stating whether the trials it came from capped preemption charges, as it states the pipe-wake latency.

Source

pub fn cap_preemption_charge(&self) -> bool

Whether this record was produced under --cap-preemption-charge.

Source

pub fn guest_ids(&self) -> Option<GuestIds>

How the run this record came from numbered its guest, if no PID namespace of its own did.

Source

pub fn with_guest_ids(self, ids: GuestIds) -> Self

The same record, retaining the guest numbering of schedules used to construct it. Namespace numbering keeps the legacy omitted field.

Source

pub fn extract_all(&self) -> BTreeMap<DetTid, ThreadHistory>

Make a copy of everything in the PreemptionRecord in a public format.

Source

pub fn as_vecs(&self) -> BTreeMap<DetTid, Vec<(LogicalTime, Priority)>>

Inverse of from_vecs.

Source

pub fn strip_contents(self) -> Self

TODO: provide a better way to create an empty PreemptionRecord but with entries for a given set of tids.

Source

pub fn split_map<F, R>(&mut self, splitter: F)

Iterates over each sched event and applies function event -> *event yielding resulting iterator as new events This effectively moves content of global allowing to split or delete events based on the function provided

Source

pub fn schedevents_iter_mut(&mut self) -> IterMut<'_, SchedEvent>

Iterate over the schedevents.

Source

pub fn preemptions_only(&mut self)

Leave only the per-thread preemption records, not the global schedule.

Source

pub fn clone_preemptions_only(&self) -> Self

Make a copy just of the preemptions (cheap) rather than the whole schedule trace (expensive)

Source

pub fn schedevents(&self) -> &Vec<SchedEvent>

Read-only access to the raw event schedule.

Source

pub fn contains_schedevents(&self) -> bool

Returns true if the schedule trace (SchedEvent) record is nonempty.

Source

pub fn from_vecs(bt: &BTreeMap<DetTid, Vec<(LogicalTime, Priority)>>) -> Self

Convert from a flat vector representation (Time,Priority_AFTER_Time) into the internal representation. The very first timeslice should have a zero timestamp, but it is ignored if nonzero.

Source

pub fn time_skips(&self) -> Option<&[TimeSkip]>

The jumps of global time the recorder saw (time_skips), or None when the record does not say.

Source

pub fn into_global(self) -> Vec<SchedEvent>

Extracts the inner global events.

Source

pub fn write_to_disk(&self, path: &Path) -> Result<(), String>

Save to disk.

Source

pub fn validate(&self) -> Result<(), String>

Perform internal invariant checks on the PreemptionRecord and return an error if it is not well formed.

Source

pub fn validate_contents(&self) -> Result<(), String>

Check everything Self::validate does but the format (Self::validate_format), whose failure is a refusal rather than a malformed record, and which readers check separately for that reason.

Source

pub fn validate_format(&self) -> Result<(), String>

Check the record’s format and its jumps of global time: a format this Hermit reads, with the list that format requires, in stream order, to later and finite deadlines. A failure is a refusal of the record, not a malformed file (RecordFormatRefusal).

Source

pub fn normalize(&self) -> PreemptionRecord

Normalize priorities for readibility.

Source

pub fn with_latest_preempt_removed(&self) -> PreemptionRecord

Remove whichever is the latest preemption across all thread histories. If there are no priority changes in any thread history, the entire last thread (highest thread number) is completely removed. Note this function assumes the last priority change in the list has the latest preempt time.

Trait Implementations§

Source§

impl Clone for PreemptionRecord

Source§

fn clone(&self) -> PreemptionRecord

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PreemptionRecord

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for PreemptionRecord

Source§

fn default() -> PreemptionRecord

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for PreemptionRecord

Source§

fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error>

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for PreemptionRecord

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for PreemptionRecord

Source§

impl Hash for PreemptionRecord

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for PreemptionRecord

Source§

fn eq(&self, other: &PreemptionRecord) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for PreemptionRecord

Source§

fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error>

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for PreemptionRecord

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

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

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.

§

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> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows 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) -> R
where R: 'a,

Mutably borrows 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
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows 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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows 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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .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
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .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
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

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

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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