Skip to main content

FunctionRunner

Struct FunctionRunner 

Source
struct FunctionRunner<'a, FEN: FoundryEvmNetwork> {
    tcfg: Cow<'a, TestRunnerConfig<FEN>>,
    executor: Cow<'a, Executor<FEN>>,
    cr: &'a ContractRunner<'a, FEN>,
    address: Address,
    setup: &'a TestSetup,
    result: TestResult,
}
Expand description

Executes a single test function, returning a TestResult.

Fields§

§tcfg: Cow<'a, TestRunnerConfig<FEN>>

The function-level configuration.

§executor: Cow<'a, Executor<FEN>>

The EVM executor.

§cr: &'a ContractRunner<'a, FEN>

The parent runner.

§address: Address

The address of the test contract.

§setup: &'a TestSetup

The test setup result.

§result: TestResult

The test result. Returned after running the test.

Implementations§

Source§

impl<'a, FEN: FoundryEvmNetwork> FunctionRunner<'a, FEN>

Source

fn new(cr: &'a ContractRunner<'a, FEN>, setup: &'a TestSetup) -> Self

Source

const fn revert_decoder(&self) -> &'a RevertDecoder

Source

fn fuzz_progress( &self, test_name: &str, timeout: Option<u32>, runs: u32, ) -> Option<ProgressBar>

Creates the progress bar for a fuzz or invariant campaign, if progress is shown.

Source

fn fuzz_minimize_target_id(&self, test_name: &str) -> String

Source

fn symbolic_artifact( &self, test_name: &str, kind: SymbolicCounterexampleArtifactKind, symbolic: &SymbolicResult, fail_on_revert: bool, calls: Vec<SymbolicCounterexampleCall>, ) -> SymbolicCounterexampleArtifact

Builds a symbolic counterexample artifact for this test.

Source

fn write_symbolic_artifact( &self, file_name: &str, artifact: &SymbolicCounterexampleArtifact, ) -> Option<SymbolicArtifactRef>

Writes artifact to the stable per-test path, so the latest counterexample replaces older ones, and returns a reference to it.

Source

fn persist_sequence_artifact( &self, test_name: &str, file_name: &str, calls: Vec<SymbolicCounterexampleCall>, fail_on_revert: bool, storage: &[SymbolicStorageAssignment], failure: Option<SymbolicInvariantArtifactFailure>, ) -> Option<SymbolicArtifactRef>

Persists a replay-confirmed stateful counterexample as a sequence artifact.

Source

fn sequence_calls( &self, call_sequence: &[BaseCounterExample], ) -> Vec<SymbolicCounterexampleCall>

Converts a counterexample sequence into artifact calls.

Source

fn replay_confirmed_symbolic_single_call( &self, call: &SymbolicCounterexampleCall, expected_reason: Option<&str>, ) -> Result<(RawCallResult<FEN>, Option<String>), String>

Replays a single-call minimization candidate and checks it fails for expected_reason.

Source

fn replay_invariant_error_sequence( &mut self, replay: SequenceReplay<'_>, original_calls: &[BasicTxDetails], inner_sequence: Option<Vec<Option<BasicTxDetails>>>, identified_contracts: &ContractsByAddress, current_settings: &InvariantSettings, artifact: SequenceArtifactSpec<'_>, progress: Option<&ProgressBar>, position: Option<(usize, usize)>, ) -> Result<ReplayedInvariantSequence>

Shrinks and replays a failing invariant call sequence, persisting the confirmed counterexample as a symbolic artifact.

Source

fn replay_error( &mut self, config: InvariantConfig, executor: Executor<FEN>, calls: &[BasicTxDetails], inner_sequence: Option<Vec<Option<BasicTxDetails>>>, expect_assertion_failure: bool, target_value: Option<I256>, invariant_contract: &InvariantContract<'_>, target_invariant: &Function, identified_contracts: &ContractsByAddress, progress: Option<&ProgressBar>, position: Option<(usize, usize)>, ) -> Result<ReplayErrorResult>

Shrinks and replays a failing call sequence, collecting logs, traces and coverage into the test result. Returns the counterexample, the terminal check outcome when shrinking re-checked the sequence, and the fork block number.

Source

fn minimize_symbolic_invariant_sequence( &self, replay: SequenceReplay<'_>, calls: &[BasicTxDetails], identified_contracts: &ContractsByAddress, current_settings: &InvariantSettings, ) -> Option<MinimizedSequence>

Source

fn symbolic_sequence_sender_candidates( &self, current_settings: &InvariantSettings, ) -> Vec<Address>

Source

fn symbolic_sequence_failure( &self, replay: SequenceReplay<'_>, calls: &[SymbolicCounterexampleCall], ) -> Option<CheckSequenceOutcome>

Replays calls concretely and returns the outcome if the sequence still fails.

Source

fn replay_persisted_call_sequence( &self, invariant_contract: &InvariantContract<'_>, call_sequence: &mut [BaseCounterExample], expect_assertion_failure: bool, storage: &[SymbolicStorageAssignment], ) -> Result<(Vec<BasicTxDetails>, CheckSequenceOutcome)>

Converts a persisted counterexample into transactions (applying show_solidity in place) and replays it through check_sequence.

Source

fn replay_persisted_handler_failures( &self, handlers_dir: &Path, current_settings: &InvariantSettings, ) -> (HashMap<(Address, Selector), InvariantFuzzError>, HashMap<(Address, Selector, B256), SymbolicHandlerReplayStorage>)

Replays persisted handler-side assertion bugs. A file is kept only if the anchor still asserts at the same (reverter, selector) site; stale files (anchor no longer asserts, asserts at a different site, or earlier call asserts) are deleted in place.

Source

fn apply_function_inline_config(&mut self, func: &Function) -> Result<()>

Configures this runner with the inline configuration for the contract.

Source

fn run( self, func: &Function, invariants: &[&Function], shared_invariant_namespace: bool, kind: TestFunctionKind, call_after_invariant: bool, identified_contracts: Option<&ContractsByAddress>, ) -> TestResult

Source

fn run_unit_test(self, func: &Function) -> TestResult

Runs a single unit test.

Applies before test txes (if any), runs current test and returns the TestResult.

Before test txes are applied in order and state modifications committed to the EVM database (therefore the unit test call will be made on modified state). State modifications of before test txes and unit test function call are discarded after test ends, similar to eth_call.

Source

fn call_test( &mut self, func: &Function, args: &[DynSolValue], ) -> Result<(RawCallResult<FEN>, Option<String>), ()>

Calls func on the test contract, returning the raw result and revert reason. Skipped and failed calls are recorded in the test result and returned as Err.

Source

fn symbolic_run_input<'f>( &'f self, func: &'f Function, sender: Address, collect_success_input: bool, corpus_seeds: Vec<SymbolicConcreteInput>, branch_target: Option<SymbolicBranchTarget>, ) -> SymbolicRunInput<'f, FEN>

Builds the symbolic executor input for one run of func.

Source

fn fuzz_test_paths<'f>( &self, func: &'f Function, fuzz_config: &mut FuzzConfig, ) -> (Cow<'f, str>, Option<PathBuf>, (PathBuf, PathBuf))

Sets the per-test corpus directory in fuzz_config and returns the test path name, the legacy corpus directory and the persisted failure (dir, file) paths.

Source

fn import_symbolic_fuzz_corpus( &self, func: &Function, ) -> (Vec<SymbolicConcreteInput>, Option<SymbolicCorpusSeedMetadata>)

Imports persisted fuzz corpus entries as symbolic path-priority hints.

Source

fn import_symbolic_fuzz_frontiers( &self, func: &Function, fuzz_config: &FuzzConfig, ) -> Vec<(u64, Address, SymbolicBranchTarget, SymbolicConcreteInput)>

Imports persisted fuzz branch frontiers as (id, sender, branch target, input) seeds.

Source

fn import_symbolic_invariant_frontiers( &self, invariant_contract: &InvariantContract<'_>, invariant_config: &InvariantConfig, ) -> Vec<(FuzzBranchFrontierRecord, Arc<[BasicTxDetails]>)>

Source

fn symbolic_corpus_seed_input( &self, func: &Function, tx_seq: &[BasicTxDetails], ) -> Option<SymbolicConcreteInput>

Source

fn run_symbolic_test(self, func: &Function) -> TestResult

Runs a symbolic test and replays any discovered counterexample concretely.

Source

fn replay_symbolic_counterexample( &mut self, func: &Function, args: Vec<DynSolValue>, calldata: Bytes, stats: SymbolicStats, symbolic_config: &SymbolicConfig, ) -> (TestStatus, Option<String>, Option<CounterExample>, SymbolicResult)

Replays a symbolic counterexample concretely, minimizing and persisting it when it reproduces.

Source

fn run_symbolic_artifact_replay( self, func: &Function, invariants: &[&Function], call_after_invariant: bool, ) -> TestResult

Replays a durable symbolic counterexample artifact against this freshly set up test.

Source

fn replay_symbolic_artifact( &mut self, func: &Function, invariants: &[&Function], call_after_invariant: bool, ) -> Result<(), String>

Replays a persisted symbolic counterexample artifact against func, failing with the mismatch reason when the recorded outcome does not reproduce.

Source

fn try_seed_fuzz_corpus_from_frontiers( &self, func: &Function, fuzz_config: &FuzzConfig, )

Source

fn invariant_sequence_failure_site( &self, invariant_contract: &InvariantContract<'_>, invariant_idx: usize, sequence: &[BasicTxDetails], replay_order: &[usize], call_after_invariant: bool, ) -> Option<CheckSequenceFailureSite>

Source

fn solve_invariants_from_frontier_prefix( &self, invariant_contract: &InvariantContract<'_>, invariant_indexes: &[usize], prefix_executor: &Executor<FEN>, target: &SymbolicInvariantTarget, sender: Address, prefix: &[BasicTxDetails], ) -> Vec<(usize, CheckSequenceFailureSite, Vec<BasicTxDetails>)>

Source

fn try_seed_invariant_corpus_from_frontiers( &self, invariant_contract: &InvariantContract<'_>, invariant_config: &InvariantConfig, sender_filters: &SenderFilters, targeted_contracts: &FuzzRunIdentifiedContracts, dynamic_target_ctx: &DynamicTargetCtx<'_>, )

Source

fn try_seed_fuzz_corpus_symbolically( &self, func: &Function, fuzz_config: &FuzzConfig, )

Source

fn persist_symbolic_fuzz_seed( &self, corpus: &FuzzCorpusConfig, sender: Address, calldata: Bytes, ) -> Result<Option<PathBuf>>

Persists a concretely confirmed symbolic input as a fuzz corpus seed.

Source

fn symbolic_fuzz_seed_replay( &self, sender: Address, input: &SymbolicConcreteInput, fuzz_config: &FuzzConfig, ) -> Option<bool>

Replays a symbolic seed concretely: Some(success), or None if the input was rejected.

Source

fn run_table_test(self, func: &Function) -> TestResult

Runs a table test. The parameters dataset (table) is created from defined parameter fixtures, therefore each test table parameter should have the same number of fixtures defined. E.g. for table test

  • table_test(uint256 amount, bool swap) fixtures are defined as
  • uint256[] public fixtureAmount = [2, 5]
  • bool[] public fixtureSwap = [true, false] The table_test is then called with the pair of args (2, true) and (5, false).
Source

fn run_invariant_test( self, func: &Function, invariants: Vec<(&Function, bool)>, shared_invariant_namespace: bool, call_after_invariant: bool, identified_contracts: &ContractsByAddress, ) -> TestResult

Source

fn sort_predicate_results( &self, results: impl Iterator<Item = InvariantPredicateResult>, ) -> Vec<InvariantPredicateResult>

Orders predicate results by their declaration position in the test contract ABI.

Source

fn invariant_skip_reason(&self, func: &Function) -> Option<SkipReason>

Source

fn run_fuzz_test(self, func: &Function) -> TestResult

Runs a fuzzed test.

Applies the before test txes (if any), fuzzes the current function and returns the TestResult.

Before test txes are applied in order and state modifications committed to the EVM database (therefore the fuzz test will use the modified state). State modifications of before test txes and fuzz test are discarded after test ends, similar to eth_call.

Source

fn prepare_test(&mut self, func: &Function) -> Result<(), ()>

Source

fn fuzz_runner(&self) -> TestRunner

Source

fn run_showmap( self, func: &Function, test_name: &str, corpus_dir: Option<PathBuf>, showmap: &ShowmapConfig, target: ShowmapReplayTarget<'_>, ) -> TestResult

Replays the persisted corpus and writes AFL-afl-showmap-style files.

Source

fn invariant_runner(&self) -> TestRunner

Source

fn clone_executor(&self) -> Executor<FEN>

Source

fn clone_executor_with_symbolic_storage( &self, storage: &[SymbolicStorageAssignment], ) -> Result<Executor<FEN>>

Source

fn build_fuzz_state( &self, invariant: bool, func: Option<&Function>, ) -> EvmFuzzState

Source

fn build_fuzz_state_uncached( &self, invariant: bool, config: FuzzDictionaryConfig, ) -> EvmFuzzState

Trait Implementations§

Source§

impl<'a, FEN: FoundryEvmNetwork> Deref for FunctionRunner<'a, FEN>

Source§

type Target = Cow<'a, TestRunnerConfig<FEN>>

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.

Auto Trait Implementations§

§

impl<'a, FEN> !Freeze for FunctionRunner<'a, FEN>

§

impl<'a, FEN> !RefUnwindSafe for FunctionRunner<'a, FEN>

§

impl<'a, FEN> !UnwindSafe for FunctionRunner<'a, FEN>

§

impl<'a, FEN> Send for FunctionRunner<'a, FEN>
where Cow<'a, TestRunnerConfig<FEN>>: Send, Cow<'a, Executor<FEN>>: Send, &'a ContractRunner<'a, FEN>: Send,

§

impl<'a, FEN> Sync for FunctionRunner<'a, FEN>
where Cow<'a, TestRunnerConfig<FEN>>: Sync, Cow<'a, Executor<FEN>>: Sync, &'a ContractRunner<'a, FEN>: Sync,

§

impl<'a, FEN> Unpin for FunctionRunner<'a, FEN>
where Cow<'a, TestRunnerConfig<FEN>>: Unpin, Cow<'a, Executor<FEN>>: Unpin, &'a ContractRunner<'a, FEN>: Unpin,

§

impl<'a, FEN> UnsafeUnpin for FunctionRunner<'a, FEN>
where Cow<'a, TestRunnerConfig<FEN>>: UnsafeUnpin, Cow<'a, Executor<FEN>>: UnsafeUnpin, &'a ContractRunner<'a, FEN>: UnsafeUnpin,

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T, R> CollectAndApply<T, R> for T

§

fn collect_and_apply<I, F>(iter: I, f: F) -> R
where I: Iterator<Item = T>, F: FnOnce(&[T]) -> R,

Equivalent to f(&iter.collect::<Vec<_>>()).

§

type Output = R

§

impl<T> Conv for T

§

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

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

impl<T> ErasedDestructor for T
where T: 'static,

§

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<TxEnv, T> FromRecoveredTx<&T> for TxEnv
where TxEnv: FromRecoveredTx<T>,

§

fn from_recovered_tx(tx: &&T, sender: Address) -> TxEnv

Builds a TxEnv from a transaction and a sender address.
§

impl<TxEnv, T> FromTxWithEncoded<&T> for TxEnv
where TxEnv: FromTxWithEncoded<T>,

§

fn from_encoded_tx(tx: &&T, sender: Address, encoded: Bytes) -> TxEnv

Builds a TxEnv from a transaction, its sender, and encoded transaction bytes.
§

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> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
§

impl<L> LayerExt<L> for L

§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in [Layered].
§

impl<T> MaybeCompact for T

§

impl<D> OwoColorize for D

§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either [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,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either [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>

Set the foreground color to a specific RGB value.
§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
§

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

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
§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
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.
§

impl<T> Threaded<T> for T

§

type Rest = ()

The outputs beyond the threaded value.
§

fn split(self) -> (T, ())

Splits into the threaded value and the extra outputs.
§

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 = !

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<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

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

Layout§

Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.