pub struct E2ETestSetupBuilder<N: NodeBuilderHelper> { /* private fields */ }Expand description
Builder for configuring and launching test node setups.
By default, the nodes:
- run on a shared
Runtime::testruntime, - build payloads with
eth_payload_attributesfor the hardforks active in the chain spec, - have discovery disabled, use unused ports and serve all RPC modules except
testingover HTTP, - report an idle sync state from startup, so they gossip transactions before their first block,
- are connected to each other.
Once launched, each node receives a forkchoice update that makes genesis the head, safe and finalized block, unless dev mining is enabled.
Configuration and tree configuration modifiers are applied in the order they are added.
Use E2ETestSetupExt::test_setup_for to set up nodes on the test_chain_spec at a
hardfork, or E2ETestSetupExt::test_setup for any other chain spec:
let (mut node, wallet) = EthereumNode::test_setup_for(EthereumHardfork::Cancun)
.with_tree_config_modifier(|config| config.with_persistence_threshold(0))
.build_single()
.await?;Implementations§
Source§impl<N: NodeBuilderHelper> E2ETestSetupBuilder<N>
impl<N: NodeBuilderHelper> E2ETestSetupBuilder<N>
Sourcepub fn new(num_nodes: usize, chain_spec: Arc<N::ChainSpec>) -> Self
pub fn new(num_nodes: usize, chain_spec: Arc<N::ChainSpec>) -> Self
Creates a new builder for num_nodes nodes of the given chain.
Sourcepub const fn with_num_nodes(self, num_nodes: usize) -> Self
pub const fn with_num_nodes(self, num_nodes: usize) -> Self
Sets the number of nodes to launch.
Sourcepub fn with_runtime(self, runtime: Runtime) -> Self
pub fn with_runtime(self, runtime: Runtime) -> Self
Launches the nodes on the given runtime instead of a new Runtime::test.
This lets multiple setups, or other components of a test, share the same tokio handle and rayon pools. Note that the tasks of the nodes are only shut down once all handles to the runtime are dropped, not when the nodes are dropped.
Sourcepub fn with_attributes_generator<G>(self, generator: G) -> Self
pub fn with_attributes_generator<G>(self, generator: G) -> Self
Sets the generator for the payload attributes of the payloads built by the test nodes.
The generator is called with the timestamp of the next payload. Defaults to
eth_payload_attributes for the chain spec of the setup.
Sourcepub const fn with_connect_nodes(self, connect_nodes: bool) -> Self
pub const fn with_connect_nodes(self, connect_nodes: bool) -> Self
Sets whether nodes should be interconnected (default: true).
Sourcepub fn with_tree_config_modifier<G>(self, modifier: G) -> Self
pub fn with_tree_config_modifier<G>(self, modifier: G) -> Self
Adds a modifier for the tree configuration.
The closure receives the current tree config and returns a modified version. The base config is the default config with a small cross block cache.
Sourcepub fn with_node_config_modifier<G>(self, modifier: G) -> Self
pub fn with_node_config_modifier<G>(self, modifier: G) -> Self
Adds a modifier for the node configuration.
The closure receives the current node config and returns a modified version.
Sourcepub fn with_rpc_modifier<G>(self, modifier: G) -> Self
pub fn with_rpc_modifier<G>(self, modifier: G) -> Self
Adds a modifier for the RPC server arguments.
The closure receives the current arguments, which serve all modules except testing over
HTTP on an unused port.
Sourcepub fn with_pruning(self, pruning: PruningArgs) -> Self
pub fn with_pruning(self, pruning: PruningArgs) -> Self
Sets the pruning arguments for the test nodes.
Sourcepub const fn with_storage_v2(self, storage_v2: bool) -> Self
pub const fn with_storage_v2(self, storage_v2: bool) -> Self
Sets whether nodes use the v2 storage layout (--storage.v2), which routes tx hashes,
history indices, etc. to RocksDB and changesets/senders to static files.
Defaults to the node’s --storage.v2 default. Node config modifiers run afterwards and can
still override it.
Sourcepub fn with_dev_mode(self, dev: bool) -> Self
pub fn with_dev_mode(self, dev: bool) -> Self
Sets whether the nodes run in dev mode (--dev).
Unlike dev mining, this only sets the dev flag and does not start a local miner.
Sourcepub fn with_dev_mining(self, block_time: Option<Duration>) -> Self
pub fn with_dev_mining(self, block_time: Option<Duration>) -> Self
Launches the node in dev mode with a local miner that builds a block every block_time, or
as soon as a transaction is pending if None.
Dev mining is limited to a single node, since every node would mine its own chain. The local
miner drives forkchoice and payload building, so the node does not receive the initial
forkchoice update to genesis, and the block producing helpers of NodeTestContext, e.g.
NodeTestContext::advance_block and NodeTestContext::update_forkchoice, must not be
used. Use Self::map_dev_payload_attributes to customize the payload attributes of the
mined blocks.
Sourcepub fn map_dev_payload_attributes<G>(self, map: G) -> Self
pub fn map_dev_payload_attributes<G>(self, map: G) -> Self
Maps the payload attributes of the blocks built by the local miner of dev mining nodes, e.g. to set the fee recipient.
Mappers are applied in the order they are added. Has no effect unless dev mining is enabled.
Sourcepub async fn build(self) -> Result<(Vec<NodeHelperType<N>>, Wallet)>
pub async fn build(self) -> Result<(Vec<NodeHelperType<N>>, Wallet)>
Builds and launches the test nodes.
Sourcepub async fn build_single(self) -> Result<(NodeHelperType<N>, Wallet)>
pub async fn build_single(self) -> Result<(NodeHelperType<N>, Wallet)>
Builds and launches a single test node.
Returns an error if the builder was not configured with exactly one node.
Trait Implementations§
Auto Trait Implementations§
impl<N> !RefUnwindSafe for E2ETestSetupBuilder<N>
impl<N> !UnwindSafe for E2ETestSetupBuilder<N>
impl<N> Freeze for E2ETestSetupBuilder<N>where
<<N as Node<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::ComponentsBuilder as NodeComponentsBuilder<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::Components: Sized,
<<N as NodeTypes>::Payload as PayloadTypes>::PayloadAttributes: Sized,
<N as NodeTypes>::Payload: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::BlockHeader: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::Receipt: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::SignedTx: Sized,
<N as NodeTypes>::Primitives: Sized,
Arc<<N as NodeTypes>::ChainSpec>: Freeze,
Option<Arc<dyn Fn(u64) -> <<N as NodeTypes>::Payload as PayloadTypes>::PayloadAttributes + Sync + Send>>: Freeze,
Vec<Box<dyn Fn(NodeConfig<<N as NodeTypes>::ChainSpec>) -> NodeConfig<<N as NodeTypes>::ChainSpec> + Sync + Send>>: Freeze,
Option<fn(LaunchArgs<N>) -> Pin<Box<dyn Future<Output = Result<NodeTestContext<NodeAdapter<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>, <<N as Node<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::ComponentsBuilder as NodeComponentsBuilder<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::Components>, <N as Node<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::AddOns>, Report>> + Send>>>: Freeze,
Option<Arc<dyn Fn(<<N as NodeTypes>::Payload as PayloadTypes>::PayloadAttributes) -> <<N as NodeTypes>::Payload as PayloadTypes>::PayloadAttributes + Sync + Send>>: Freeze,
impl<N> Send for E2ETestSetupBuilder<N>where
<<N as Node<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::ComponentsBuilder as NodeComponentsBuilder<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::Components: Sized,
<<N as NodeTypes>::Payload as PayloadTypes>::PayloadAttributes: Sized,
<N as NodeTypes>::Payload: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::BlockHeader: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::Receipt: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::SignedTx: Sized,
<N as NodeTypes>::Primitives: Sized,
Arc<<N as NodeTypes>::ChainSpec>: Send,
Option<Arc<dyn Fn(u64) -> <<N as NodeTypes>::Payload as PayloadTypes>::PayloadAttributes + Sync + Send>>: Send,
Vec<Box<dyn Fn(NodeConfig<<N as NodeTypes>::ChainSpec>) -> NodeConfig<<N as NodeTypes>::ChainSpec> + Sync + Send>>: Send,
Option<fn(LaunchArgs<N>) -> Pin<Box<dyn Future<Output = Result<NodeTestContext<NodeAdapter<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>, <<N as Node<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::ComponentsBuilder as NodeComponentsBuilder<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::Components>, <N as Node<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::AddOns>, Report>> + Send>>>: Send,
Option<Arc<dyn Fn(<<N as NodeTypes>::Payload as PayloadTypes>::PayloadAttributes) -> <<N as NodeTypes>::Payload as PayloadTypes>::PayloadAttributes + Sync + Send>>: Send,
impl<N> Sync for E2ETestSetupBuilder<N>where
<<N as Node<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::ComponentsBuilder as NodeComponentsBuilder<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::Components: Sized,
<<N as NodeTypes>::Payload as PayloadTypes>::PayloadAttributes: Sized,
<N as NodeTypes>::Payload: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::BlockHeader: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::Receipt: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::SignedTx: Sized,
<N as NodeTypes>::Primitives: Sized,
Arc<<N as NodeTypes>::ChainSpec>: Sync,
Option<Arc<dyn Fn(u64) -> <<N as NodeTypes>::Payload as PayloadTypes>::PayloadAttributes + Sync + Send>>: Sync,
Vec<Box<dyn Fn(NodeConfig<<N as NodeTypes>::ChainSpec>) -> NodeConfig<<N as NodeTypes>::ChainSpec> + Sync + Send>>: Sync,
Option<fn(LaunchArgs<N>) -> Pin<Box<dyn Future<Output = Result<NodeTestContext<NodeAdapter<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>, <<N as Node<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::ComponentsBuilder as NodeComponentsBuilder<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::Components>, <N as Node<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::AddOns>, Report>> + Send>>>: Sync,
Option<Arc<dyn Fn(<<N as NodeTypes>::Payload as PayloadTypes>::PayloadAttributes) -> <<N as NodeTypes>::Payload as PayloadTypes>::PayloadAttributes + Sync + Send>>: Sync,
impl<N> Unpin for E2ETestSetupBuilder<N>where
<<N as Node<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::ComponentsBuilder as NodeComponentsBuilder<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::Components: Sized,
<<N as NodeTypes>::Payload as PayloadTypes>::PayloadAttributes: Sized,
<N as NodeTypes>::Payload: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::BlockHeader: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::Receipt: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::SignedTx: Sized,
<N as NodeTypes>::Primitives: Sized,
Arc<<N as NodeTypes>::ChainSpec>: Unpin,
Option<Arc<dyn Fn(u64) -> <<N as NodeTypes>::Payload as PayloadTypes>::PayloadAttributes + Sync + Send>>: Unpin,
Vec<Box<dyn Fn(NodeConfig<<N as NodeTypes>::ChainSpec>) -> NodeConfig<<N as NodeTypes>::ChainSpec> + Sync + Send>>: Unpin,
Option<fn(LaunchArgs<N>) -> Pin<Box<dyn Future<Output = Result<NodeTestContext<NodeAdapter<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>, <<N as Node<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::ComponentsBuilder as NodeComponentsBuilder<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::Components>, <N as Node<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::AddOns>, Report>> + Send>>>: Unpin,
Option<Arc<dyn Fn(<<N as NodeTypes>::Payload as PayloadTypes>::PayloadAttributes) -> <<N as NodeTypes>::Payload as PayloadTypes>::PayloadAttributes + Sync + Send>>: Unpin,
impl<N> UnsafeUnpin for E2ETestSetupBuilder<N>where
<<N as Node<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::ComponentsBuilder as NodeComponentsBuilder<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::Components: Sized,
<<N as NodeTypes>::Payload as PayloadTypes>::PayloadAttributes: Sized,
<N as NodeTypes>::Payload: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::BlockHeader: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::Receipt: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::SignedTx: Sized,
<N as NodeTypes>::Primitives: Sized,
Arc<<N as NodeTypes>::ChainSpec>: UnsafeUnpin,
Option<Arc<dyn Fn(u64) -> <<N as NodeTypes>::Payload as PayloadTypes>::PayloadAttributes + Sync + Send>>: UnsafeUnpin,
Vec<Box<dyn Fn(NodeConfig<<N as NodeTypes>::ChainSpec>) -> NodeConfig<<N as NodeTypes>::ChainSpec> + Sync + Send>>: UnsafeUnpin,
Option<fn(LaunchArgs<N>) -> Pin<Box<dyn Future<Output = Result<NodeTestContext<NodeAdapter<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>, <<N as Node<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::ComponentsBuilder as NodeComponentsBuilder<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::Components>, <N as Node<FullNodeTypesAdapter<N, Arc<TempDatabase<DatabaseEnv>>, BlockchainProvider<NodeTypesWithDBAdapter<N, Arc<TempDatabase<DatabaseEnv>>>>>>>::AddOns>, Report>> + Send>>>: UnsafeUnpin,
Option<Arc<dyn Fn(<<N as NodeTypes>::Payload as PayloadTypes>::PayloadAttributes) -> <<N as NodeTypes>::Payload as PayloadTypes>::PayloadAttributes + Sync + Send>>: UnsafeUnpin,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Conv for T
impl<T> Conv for T
impl<T> ErasedDestructor for Twhere
T: 'static,
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<TxEnv, T> FromRecoveredTx<&T> for TxEnvwhere
TxEnv: FromRecoveredTx<T>,
impl<TxEnv, T> FromRecoveredTx<&T> for TxEnvwhere
TxEnv: FromRecoveredTx<T>,
§fn from_recovered_tx(tx: &&T, sender: Address) -> TxEnv
fn from_recovered_tx(tx: &&T, sender: Address) -> TxEnv
TxEnv] from a transaction and a sender address.§impl<TxEnv, T> FromTxWithEncoded<&T> for TxEnvwhere
TxEnv: FromTxWithEncoded<T>,
impl<TxEnv, T> FromTxWithEncoded<&T> for TxEnvwhere
TxEnv: FromTxWithEncoded<T>,
§fn from_encoded_tx(tx: &&T, sender: Address, encoded: Bytes) -> TxEnv
fn from_encoded_tx(tx: &&T, sender: Address, encoded: Bytes) -> TxEnv
TxEnv] from a transaction, its sender, and encoded transaction bytes.§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].impl<T> MaybeDebug for Twhere
T: Debug,
impl<T> MaybeSend for Twhere
T: Send,
§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
§fn fg(&self, value: Color) -> Painted<&T>
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 bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
§fn bg(&self, value: Color) -> Painted<&T>
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>
fn on_primary(&self) -> Painted<&T>
§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
§fn attr(&self, value: Attribute) -> Painted<&T>
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 rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
§fn quirk(&self, value: Quirk) -> Painted<&T>
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 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.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
§fn whenever(&self, value: Condition) -> Painted<&T>
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);§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T> ServiceExt for T
impl<T> ServiceExt for T
§fn propagate_header(self, header: HeaderName) -> PropagateHeader<Self>where
Self: Sized,
fn propagate_header(self, header: HeaderName) -> PropagateHeader<Self>where
Self: Sized,
§fn add_extension<T>(self, value: T) -> AddExtension<Self, T>where
Self: Sized,
fn add_extension<T>(self, value: T) -> AddExtension<Self, T>where
Self: Sized,
§fn map_request_body<F>(self, f: F) -> MapRequestBody<Self, F>where
Self: Sized,
fn map_request_body<F>(self, f: F) -> MapRequestBody<Self, F>where
Self: Sized,
§fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
§fn compression(self) -> Compression<Self>where
Self: Sized,
fn compression(self) -> Compression<Self>where
Self: Sized,
§fn decompression(self) -> Decompression<Self>where
Self: Sized,
fn decompression(self) -> Decompression<Self>where
Self: Sized,
§fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
§fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
§fn follow_redirects(self) -> FollowRedirect<Self>where
Self: Sized,
fn follow_redirects(self) -> FollowRedirect<Self>where
Self: Sized,
§fn sensitive_headers(
self,
headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveRequestHeaders<SetSensitiveResponseHeaders<Self>>where
Self: Sized,
fn sensitive_headers(
self,
headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveRequestHeaders<SetSensitiveResponseHeaders<Self>>where
Self: Sized,
§fn sensitive_request_headers(
self,
headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveRequestHeaders<Self>where
Self: Sized,
fn sensitive_request_headers(
self,
headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveRequestHeaders<Self>where
Self: Sized,
§fn sensitive_response_headers(
self,
headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveResponseHeaders<Self>where
Self: Sized,
fn sensitive_response_headers(
self,
headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveResponseHeaders<Self>where
Self: Sized,
§fn override_request_header<M>(
self,
header_name: HeaderName,
make: M,
) -> SetRequestHeader<Self, M>where
Self: Sized,
fn override_request_header<M>(
self,
header_name: HeaderName,
make: M,
) -> SetRequestHeader<Self, M>where
Self: Sized,
§fn append_request_header<M>(
self,
header_name: HeaderName,
make: M,
) -> SetRequestHeader<Self, M>where
Self: Sized,
fn append_request_header<M>(
self,
header_name: HeaderName,
make: M,
) -> SetRequestHeader<Self, M>where
Self: Sized,
§fn insert_request_header_if_not_present<M>(
self,
header_name: HeaderName,
make: M,
) -> SetRequestHeader<Self, M>where
Self: Sized,
fn insert_request_header_if_not_present<M>(
self,
header_name: HeaderName,
make: M,
) -> SetRequestHeader<Self, M>where
Self: Sized,
§fn override_response_header<M>(
self,
header_name: HeaderName,
make: M,
) -> SetResponseHeader<Self, M>where
Self: Sized,
fn override_response_header<M>(
self,
header_name: HeaderName,
make: M,
) -> SetResponseHeader<Self, M>where
Self: Sized,
§fn append_response_header<M>(
self,
header_name: HeaderName,
make: M,
) -> SetResponseHeader<Self, M>where
Self: Sized,
fn append_response_header<M>(
self,
header_name: HeaderName,
make: M,
) -> SetResponseHeader<Self, M>where
Self: Sized,
§fn insert_response_header_if_not_present<M>(
self,
header_name: HeaderName,
make: M,
) -> SetResponseHeader<Self, M>where
Self: Sized,
fn insert_response_header_if_not_present<M>(
self,
header_name: HeaderName,
make: M,
) -> SetResponseHeader<Self, M>where
Self: Sized,
§fn set_request_id<M>(
self,
header_name: HeaderName,
make_request_id: M,
) -> SetRequestId<Self, M>where
Self: Sized,
M: MakeRequestId,
fn set_request_id<M>(
self,
header_name: HeaderName,
make_request_id: M,
) -> SetRequestId<Self, M>where
Self: Sized,
M: MakeRequestId,
§fn set_x_request_id<M>(self, make_request_id: M) -> SetRequestId<Self, M>where
Self: Sized,
M: MakeRequestId,
fn set_x_request_id<M>(self, make_request_id: M) -> SetRequestId<Self, M>where
Self: Sized,
M: MakeRequestId,
x-request-id as the header name. Read more§fn propagate_request_id(
self,
header_name: HeaderName,
) -> PropagateRequestId<Self>where
Self: Sized,
fn propagate_request_id(
self,
header_name: HeaderName,
) -> PropagateRequestId<Self>where
Self: Sized,
§fn propagate_x_request_id(self) -> PropagateRequestId<Self>where
Self: Sized,
fn propagate_x_request_id(self) -> PropagateRequestId<Self>where
Self: Sized,
x-request-id as the header name. Read more§fn catch_panic(self) -> CatchPanic<Self, DefaultResponseForPanic>where
Self: Sized,
fn catch_panic(self) -> CatchPanic<Self, DefaultResponseForPanic>where
Self: Sized,
500 Internal Server responses. Read more§fn request_body_limit(self, limit: usize) -> RequestBodyLimit<Self>where
Self: Sized,
fn request_body_limit(self, limit: usize) -> RequestBodyLimit<Self>where
Self: Sized,
413 Payload Too Large responses. Read more§fn trim_trailing_slash(self) -> NormalizePath<Self>where
Self: Sized,
fn trim_trailing_slash(self) -> NormalizePath<Self>where
Self: Sized,
§fn append_trailing_slash(self) -> NormalizePath<Self>where
Self: Sized,
fn append_trailing_slash(self) -> NormalizePath<Self>where
Self: Sized,
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.§impl<T> TryConv for T
impl<T> TryConv for T
§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘwhere
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘwhere
S: Into<Dispatch>,
§fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘwhere
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘwhere
S: Into<Dispatch>,
Source§fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 120 bytes