pub struct SequencerContext<N: ConnectedNetwork<PubKey>, P: SequencerPersistence> {
consensus_handle: Arc<ConsensusHandle<SeqTypes, Node<N, P>>>,
pub request_response_protocol: RequestResponseProtocol<Node<N, P>, N, P>,
state_signer: Arc<RwLock<StateSigner<SequencerApiVersion>>>,
wait_for_orchestrator: Option<Arc<OrchestratorClient>>,
tasks: TaskList,
events_streamer: Arc<RwLock<EventsStreamer<SeqTypes>>>,
detached: bool,
node_state: NodeState,
network_config: NetworkConfig<SeqTypes>,
validator_config: ValidatorConfig<SeqTypes>,
}Expand description
The sequencer context contains a consensus handle and other sequencer specific information.
Fields§
§consensus_handle: Arc<ConsensusHandle<SeqTypes, Node<N, P>>>The consensus adapter that dispatches between old HotShot and new coordinator.
request_response_protocol: RequestResponseProtocol<Node<N, P>, N, P>The request-response protocol
state_signer: Arc<RwLock<StateSigner<SequencerApiVersion>>>Context for generating state signatures.
wait_for_orchestrator: Option<Arc<OrchestratorClient>>An orchestrator to wait for before starting consensus.
tasks: TaskListBackground tasks to shut down when the node is dropped.
events_streamer: Arc<RwLock<EventsStreamer<SeqTypes>>>events streamer to stream hotshot events to external clients
detached: bool§node_state: NodeState§network_config: NetworkConfig<SeqTypes>§validator_config: ValidatorConfig<SeqTypes>Implementations§
Source§impl<N, P> SequencerContext<N, P>where
N: ConnectedNetwork<PubKey>,
P: SequencerPersistence,
impl<N, P> SequencerContext<N, P>where
N: ConnectedNetwork<PubKey>,
P: SequencerPersistence,
pub async fn init<F>( network_config: NetworkConfig<SeqTypes>, upgrade: Upgrade, validator_config: ValidatorConfig<SeqTypes>, membership_coordinator: EpochMembershipCoordinator<SeqTypes>, instance_state: NodeState, storage: Option<RequestResponseStorage>, state_catchup: ParallelStateCatchup, persistence: Arc<P>, network: Arc<N>, coordinator_network: F, state_relay_server: Option<Url>, metrics: &dyn Metrics, stake_table_capacity: usize, event_consumer: impl PersistenceEventConsumer + 'static, proposal_fetcher_cfg: ProposalFetcherConfig, bootstrap_epoch_catchup_timeout: Duration, ) -> Result<Self>
Sourcefn new(
consensus_handle: Arc<ConsensusHandle<SeqTypes, Node<N, P>>>,
persistence: Arc<P>,
state_signer: StateSigner<SequencerApiVersion>,
external_event_handler: ExternalEventHandler,
request_response_protocol: RequestResponseProtocol<Node<N, P>, N, P>,
event_streamer: Arc<RwLock<EventsStreamer<SeqTypes>>>,
node_state: NodeState,
network_config: NetworkConfig<SeqTypes>,
validator_config: ValidatorConfig<SeqTypes>,
event_consumer: impl PersistenceEventConsumer + 'static,
anchor_view: Option<ViewNumber>,
proposal_fetcher_cfg: ProposalFetcherConfig,
metrics: &dyn Metrics,
) -> Self
fn new( consensus_handle: Arc<ConsensusHandle<SeqTypes, Node<N, P>>>, persistence: Arc<P>, state_signer: StateSigner<SequencerApiVersion>, external_event_handler: ExternalEventHandler, request_response_protocol: RequestResponseProtocol<Node<N, P>, N, P>, event_streamer: Arc<RwLock<EventsStreamer<SeqTypes>>>, node_state: NodeState, network_config: NetworkConfig<SeqTypes>, validator_config: ValidatorConfig<SeqTypes>, event_consumer: impl PersistenceEventConsumer + 'static, anchor_view: Option<ViewNumber>, proposal_fetcher_cfg: ProposalFetcherConfig, metrics: &dyn Metrics, ) -> Self
Constructor
Sourcepub fn wait_for_orchestrator(self, client: OrchestratorClient) -> Self
pub fn wait_for_orchestrator(self, client: OrchestratorClient) -> Self
Wait for a signal from the orchestrator before starting consensus.
Sourcepub(crate) fn with_task_list(self, tasks: TaskList) -> Self
pub(crate) fn with_task_list(self, tasks: TaskList) -> Self
Add a list of tasks to the given context.
Sourcepub fn state_signer(&self) -> Arc<RwLock<StateSigner<SequencerApiVersion>>> ⓘ
pub fn state_signer(&self) -> Arc<RwLock<StateSigner<SequencerApiVersion>>> ⓘ
Return a reference to the consensus state signer.
Sourcepub fn event_stream(&self) -> BoxStream<'static, CoordinatorEvent<SeqTypes>>
pub fn event_stream(&self) -> BoxStream<'static, CoordinatorEvent<SeqTypes>>
Stream consensus events.
pub async fn submit_transaction(&self, tx: Transaction) -> Result<()>
Sourcepub fn event_streamer(&self) -> Arc<RwLock<EventsStreamer<SeqTypes>>> ⓘ
pub fn event_streamer(&self) -> Arc<RwLock<EventsStreamer<SeqTypes>>> ⓘ
get event streamer
Sourcepub fn consensus_handle(&self) -> Arc<ConsensusHandle<SeqTypes, Node<N, P>>> ⓘ
pub fn consensus_handle(&self) -> Arc<ConsensusHandle<SeqTypes, Node<N, P>>> ⓘ
Return a reference to the consensus adapter.
pub async fn upgrade_lock(&self) -> UpgradeLock<SeqTypes>
pub async fn shutdown_consensus(&self)
pub async fn decided_leaf(&self) -> Leaf2<SeqTypes>
pub async fn state(&self, view: ViewNumber) -> Option<Arc<ValidatedState>>
pub async fn decided_state(&self) -> Option<Arc<ValidatedState>>
pub fn node_id(&self) -> u64
pub fn node_state(&self) -> NodeState
Sourcepub async fn start_consensus(&self)
pub async fn start_consensus(&self)
Start participating in consensus.
Sourcepub fn spawn(
&mut self,
name: impl Display,
task: impl Future<Output: Debug> + Send + 'static,
)
pub fn spawn( &mut self, name: impl Display, task: impl Future<Output: Debug> + Send + 'static, )
Spawn a background task attached to this context.
When this context is dropped or shut_down, background tasks will be
cancelled in the reverse order that they were spawned.
Sourcepub fn spawn_short_lived(
&mut self,
name: impl Display,
task: impl Future<Output: Debug> + Send + 'static,
)
pub fn spawn_short_lived( &mut self, name: impl Display, task: impl Future<Output: Debug> + Send + 'static, )
Spawn a short-lived background task attached to this context.
When this context is dropped or shut_down, background tasks will be
cancelled in the reverse order that they were spawned.
The only difference between a short-lived background task and a long-lived one is how urgently logging related to the task is treated.
Sourcepub async fn join(&mut self)
pub async fn join(&mut self)
Wait for consensus to complete.
Under normal conditions, this function will block forever, which is a convenient way of keeping the main thread from exiting as long as there are still active background tasks.
Sourcepub fn detach(&mut self)
pub fn detach(&mut self)
Allow this node to continue participating in consensus even after it is dropped.
Sourcepub fn network_config(&self) -> NetworkConfig<SeqTypes>
pub fn network_config(&self) -> NetworkConfig<SeqTypes>
Get the network config
Trait Implementations§
Source§impl<N: Clone + ConnectedNetwork<PubKey>, P: Clone + SequencerPersistence> Clone for SequencerContext<N, P>
impl<N: Clone + ConnectedNetwork<PubKey>, P: Clone + SequencerPersistence> Clone for SequencerContext<N, P>
Source§fn clone(&self) -> SequencerContext<N, P>
fn clone(&self) -> SequencerContext<N, P>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<N: ConnectedNetwork<PubKey>, P: SequencerPersistence> Debug for SequencerContext<N, P>
impl<N: ConnectedNetwork<PubKey>, P: SequencerPersistence> Debug for SequencerContext<N, P>
Source§impl<N: ConnectedNetwork<PubKey>, P: SequencerPersistence> Drop for SequencerContext<N, P>
impl<N: ConnectedNetwork<PubKey>, P: SequencerPersistence> Drop for SequencerContext<N, P>
Auto Trait Implementations§
impl<N, P> Freeze for SequencerContext<N, P>
impl<N, P> !RefUnwindSafe for SequencerContext<N, P>
impl<N, P> Send for SequencerContext<N, P>
impl<N, P> Sync for SequencerContext<N, P>
impl<N, P> Unpin for SequencerContext<N, P>
impl<N, P> UnsafeUnpin for SequencerContext<N, P>
impl<N, P> !UnwindSafe for SequencerContext<N, P>
Blanket Implementations§
§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
§type ArchivedMetadata = ()
type ArchivedMetadata = ()
§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
§fn deserialize(
&self,
deserializer: &mut D,
) -> Result<With<T, W>, <D as Fallible>::Error>
fn deserialize( &self, deserializer: &mut D, ) -> Result<With<T, W>, <D as Fallible>::Error>
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> 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>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> 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> LayoutRaw for T
impl<T> LayoutRaw for T
§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
§impl<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> 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.