pub struct ConsensusWriteLockGuard<'a, TYPES: NodeType> {
lock_guard: RwLockWriteGuard<'a, Consensus<TYPES>>,
}
Expand description
A thin wrapper around RwLockWriteGuard
for Consensus
that leaves debug traces when the lock is freed
Fields§
§lock_guard: RwLockWriteGuard<'a, Consensus<TYPES>>
Inner RwLockWriteGuard
Implementations§
Methods from Deref<Target = Consensus<TYPES>>§
Sourcepub fn last_decided_view(&self) -> TYPES::View
pub fn last_decided_view(&self) -> TYPES::View
Get the last decided view.
Sourcepub fn locked_view(&self) -> TYPES::View
pub fn locked_view(&self) -> TYPES::View
Get the locked view.
Sourcepub fn high_qc(&self) -> &QuorumCertificate2<TYPES>
pub fn high_qc(&self) -> &QuorumCertificate2<TYPES>
Get the high QC.
Sourcepub fn transition_qc(
&self,
) -> Option<&(QuorumCertificate2<TYPES>, NextEpochQuorumCertificate2<TYPES>)>
pub fn transition_qc( &self, ) -> Option<&(QuorumCertificate2<TYPES>, NextEpochQuorumCertificate2<TYPES>)>
Get the transition QC.
Sourcepub fn update_highest_block(&mut self, block_number: u64)
pub fn update_highest_block(&mut self, block_number: u64)
Update the highest block number
Sourcepub fn update_transition_qc(
&mut self,
qc: QuorumCertificate2<TYPES>,
next_epoch_qc: NextEpochQuorumCertificate2<TYPES>,
)
pub fn update_transition_qc( &mut self, qc: QuorumCertificate2<TYPES>, next_epoch_qc: NextEpochQuorumCertificate2<TYPES>, )
Update the transition QC.
Sourcepub fn state_cert(&self) -> Option<&LightClientStateUpdateCertificate<TYPES>>
pub fn state_cert(&self) -> Option<&LightClientStateUpdateCertificate<TYPES>>
Get the current light client state certificate
Sourcepub fn next_epoch_high_qc(&self) -> Option<&NextEpochQuorumCertificate2<TYPES>>
pub fn next_epoch_high_qc(&self) -> Option<&NextEpochQuorumCertificate2<TYPES>>
Get the next epoch high QC.
Sourcepub fn validated_state_map(&self) -> &BTreeMap<TYPES::View, View<TYPES>>
pub fn validated_state_map(&self) -> &BTreeMap<TYPES::View, View<TYPES>>
Get the validated state map.
Sourcepub fn saved_leaves(&self) -> &CommitmentMap<Leaf2<TYPES>>
pub fn saved_leaves(&self) -> &CommitmentMap<Leaf2<TYPES>>
Get the saved leaves.
Sourcepub fn saved_payloads(
&self,
) -> &BTreeMap<TYPES::View, Arc<PayloadWithMetadata<TYPES>>>
pub fn saved_payloads( &self, ) -> &BTreeMap<TYPES::View, Arc<PayloadWithMetadata<TYPES>>>
Get the saved payloads.
Get the vid shares.
Sourcepub fn saved_da_certs(&self) -> &HashMap<TYPES::View, DaCertificate2<TYPES>>
pub fn saved_da_certs(&self) -> &HashMap<TYPES::View, DaCertificate2<TYPES>>
Get the saved DA certs.
Sourcepub fn last_proposals(
&self,
) -> &BTreeMap<TYPES::View, Proposal<TYPES, QuorumProposalWrapper<TYPES>>>
pub fn last_proposals( &self, ) -> &BTreeMap<TYPES::View, Proposal<TYPES, QuorumProposalWrapper<TYPES>>>
Get the map of our recent proposals
Sourcepub fn update_view(&mut self, view_number: TYPES::View) -> Result<()>
pub fn update_view(&mut self, view_number: TYPES::View) -> Result<()>
Update the current view.
§Errors
Can return an error when the new view_number is not higher than the existing view number.
Sourcepub async fn parent_leaf_info(
&self,
leaf: &Leaf2<TYPES>,
public_key: &TYPES::SignatureKey,
) -> Option<LeafInfo<TYPES>>
pub async fn parent_leaf_info( &self, leaf: &Leaf2<TYPES>, public_key: &TYPES::SignatureKey, ) -> Option<LeafInfo<TYPES>>
Get the parent Leaf Info from a given leaf and our public key. Returns None if we don’t have the data in out state
Sourcepub fn update_epoch(&mut self, epoch_number: TYPES::Epoch) -> Result<()>
pub fn update_epoch(&mut self, epoch_number: TYPES::Epoch) -> Result<()>
Update the current epoch.
§Errors
Can return an error when the new epoch_number is not higher than the existing epoch number.
Sourcepub fn update_action(
&mut self,
action: HotShotAction,
view: TYPES::View,
) -> bool
pub fn update_action( &mut self, action: HotShotAction, view: TYPES::View, ) -> bool
Update the last actioned view internally for votes and proposals
Returns true if the action is for a newer view than the last action of that type
Sourcepub fn reset_actions(&mut self)
pub fn reset_actions(&mut self)
reset last actions to genesis so we can resend events in tests
Sourcepub fn update_proposed_view(
&mut self,
proposal: Proposal<TYPES, QuorumProposalWrapper<TYPES>>,
) -> Result<()>
pub fn update_proposed_view( &mut self, proposal: Proposal<TYPES, QuorumProposalWrapper<TYPES>>, ) -> Result<()>
Update the last proposal.
§Errors
Can return an error when the new view_number is not higher than the existing proposed view number.
Sourcepub fn update_last_decided_view(
&mut self,
view_number: TYPES::View,
) -> Result<()>
pub fn update_last_decided_view( &mut self, view_number: TYPES::View, ) -> Result<()>
Update the last decided view.
§Errors
Can return an error when the new view_number is not higher than the existing decided view number.
Sourcepub fn update_locked_view(&mut self, view_number: TYPES::View) -> Result<()>
pub fn update_locked_view(&mut self, view_number: TYPES::View) -> Result<()>
Update the locked view.
§Errors
Can return an error when the new view_number is not higher than the existing locked view number.
Sourcepub fn update_da_view(
&mut self,
view_number: TYPES::View,
epoch: Option<TYPES::Epoch>,
payload_commitment: VidCommitment,
) -> Result<()>
pub fn update_da_view( &mut self, view_number: TYPES::View, epoch: Option<TYPES::Epoch>, payload_commitment: VidCommitment, ) -> Result<()>
Update the validated state map with a new view_number/view combo.
§Errors
Can return an error when the new view contains less information than the existing view with the same view number.
Sourcepub fn update_leaf(
&mut self,
leaf: Leaf2<TYPES>,
state: Arc<TYPES::ValidatedState>,
delta: Option<Arc<<TYPES::ValidatedState as ValidatedState<TYPES>>::Delta>>,
) -> Result<()>
pub fn update_leaf( &mut self, leaf: Leaf2<TYPES>, state: Arc<TYPES::ValidatedState>, delta: Option<Arc<<TYPES::ValidatedState as ValidatedState<TYPES>>::Delta>>, ) -> Result<()>
Update the validated state map with a new view_number/view combo.
§Errors
Can return an error when the new view contains less information than the existing view with the same view number.
Sourcefn update_validated_state_map(
&mut self,
view_number: TYPES::View,
new_view: View<TYPES>,
) -> Result<()>
fn update_validated_state_map( &mut self, view_number: TYPES::View, new_view: View<TYPES>, ) -> Result<()>
Update the validated state map with a new view_number/view combo.
§Errors
Can return an error when the new view contains less information than the existing view with the same view number.
Sourcefn update_saved_leaves(&mut self, leaf: Leaf2<TYPES>)
fn update_saved_leaves(&mut self, leaf: Leaf2<TYPES>)
Update the saved leaves with a new leaf.
Sourcepub fn update_saved_payloads(
&mut self,
view_number: TYPES::View,
payload: Arc<PayloadWithMetadata<TYPES>>,
) -> Result<()>
pub fn update_saved_payloads( &mut self, view_number: TYPES::View, payload: Arc<PayloadWithMetadata<TYPES>>, ) -> Result<()>
Update the saved payloads with a new encoded transaction.
§Errors
Can return an error when there’s an existing payload corresponding to the same view number.
Sourcepub fn update_high_qc(
&mut self,
high_qc: QuorumCertificate2<TYPES>,
) -> Result<()>
pub fn update_high_qc( &mut self, high_qc: QuorumCertificate2<TYPES>, ) -> Result<()>
Update the high QC if given a newer one.
§Errors
Can return an error when the provided high_qc is not newer than the existing entry.
Sourcepub fn update_next_epoch_high_qc(
&mut self,
high_qc: NextEpochQuorumCertificate2<TYPES>,
) -> Result<()>
pub fn update_next_epoch_high_qc( &mut self, high_qc: NextEpochQuorumCertificate2<TYPES>, ) -> Result<()>
Sourcepub fn reset_high_qc(
&mut self,
high_qc: QuorumCertificate2<TYPES>,
next_epoch_qc: NextEpochQuorumCertificate2<TYPES>,
) -> Result<()>
pub fn reset_high_qc( &mut self, high_qc: QuorumCertificate2<TYPES>, next_epoch_qc: NextEpochQuorumCertificate2<TYPES>, ) -> Result<()>
Resets high qc and next epoch qc to the provided transition qc.
§Errors
Can return an error when the provided high_qc is not newer than the existing entry.
Sourcepub fn update_state_cert(
&mut self,
state_cert: LightClientStateUpdateCertificate<TYPES>,
) -> Result<()>
pub fn update_state_cert( &mut self, state_cert: LightClientStateUpdateCertificate<TYPES>, ) -> Result<()>
Update the light client state update certificate if given a newer one.
§Errors
Can return an error when the provided state_cert is not newer than the existing entry.
Add a new entry to the vid_shares map.
Sourcepub fn update_saved_da_certs(
&mut self,
view_number: TYPES::View,
cert: DaCertificate2<TYPES>,
)
pub fn update_saved_da_certs( &mut self, view_number: TYPES::View, cert: DaCertificate2<TYPES>, )
Add a new entry to the da_certs map.
Sourcepub fn visit_leaf_ancestors<F>(
&self,
start_from: TYPES::View,
terminator: Terminator<TYPES::View>,
ok_when_finished: bool,
f: F,
) -> Result<(), HotShotError<TYPES>>where
F: FnMut(&Leaf2<TYPES>, Arc<<TYPES as NodeType>::ValidatedState>, Option<Arc<<<TYPES as NodeType>::ValidatedState as ValidatedState<TYPES>>::Delta>>) -> bool,
pub fn visit_leaf_ancestors<F>(
&self,
start_from: TYPES::View,
terminator: Terminator<TYPES::View>,
ok_when_finished: bool,
f: F,
) -> Result<(), HotShotError<TYPES>>where
F: FnMut(&Leaf2<TYPES>, Arc<<TYPES as NodeType>::ValidatedState>, Option<Arc<<<TYPES as NodeType>::ValidatedState as ValidatedState<TYPES>>::Delta>>) -> bool,
gather information from the parent chain of leaves
§Errors
If the leaf or its ancestors are not found in storage
Sourcepub fn collect_garbage(
&mut self,
old_anchor_view: TYPES::View,
new_anchor_view: TYPES::View,
)
pub fn collect_garbage( &mut self, old_anchor_view: TYPES::View, new_anchor_view: TYPES::View, )
Garbage collects based on state change right now, this removes from both the
saved_payloads
and validated_state_map
fields of Consensus
.
§Panics
On inconsistent stored entries
Sourcepub fn decided_leaf(&self) -> Leaf2<TYPES>
pub fn decided_leaf(&self) -> Leaf2<TYPES>
Gets the last decided leaf.
§Panics
if the last decided view’s leaf does not exist in the state map or saved leaves, which should never happen.
pub fn undecided_leaves(&self) -> Vec<Leaf2<TYPES>>
Sourcepub fn state(
&self,
view_number: TYPES::View,
) -> Option<&Arc<TYPES::ValidatedState>>
pub fn state( &self, view_number: TYPES::View, ) -> Option<&Arc<TYPES::ValidatedState>>
Gets the validated state with the given view number, if in the state map.
Sourcepub fn state_and_delta(&self, view_number: TYPES::View) -> StateAndDelta<TYPES>
pub fn state_and_delta(&self, view_number: TYPES::View) -> StateAndDelta<TYPES>
Gets the validated state and state delta with the given view number, if in the state map.
Sourcepub fn decided_state(&self) -> Arc<TYPES::ValidatedState>
pub fn decided_state(&self) -> Arc<TYPES::ValidatedState>
Gets the last decided validated state.
§Panics
If the last decided view’s state does not exist in the state map, which should never happen.
Sourcepub fn is_epoch_transition(&self, leaf_commit: LeafCommitment<TYPES>) -> bool
pub fn is_epoch_transition(&self, leaf_commit: LeafCommitment<TYPES>) -> bool
Returns true if a given leaf is for the epoch transition
Sourcepub fn is_high_qc_for_epoch_transition(&self) -> bool
pub fn is_high_qc_for_epoch_transition(&self) -> bool
Returns true if our high QC is for one of the epoch transition blocks
Sourcepub fn check_eqc(
&self,
proposed_leaf: &Leaf2<TYPES>,
parent_leaf: &Leaf2<TYPES>,
) -> bool
pub fn check_eqc( &self, proposed_leaf: &Leaf2<TYPES>, parent_leaf: &Leaf2<TYPES>, ) -> bool
Returns true if the parent_leaf
formed an eQC for the previous epoch to the proposed_leaf
Sourcepub fn is_high_qc_ge_root_block(&self) -> bool
pub fn is_high_qc_ge_root_block(&self) -> bool
Returns true if our high QC is for the block equal or greater than the root epoch block
Trait Implementations§
Source§impl<TYPES: NodeType> Deref for ConsensusWriteLockGuard<'_, TYPES>
impl<TYPES: NodeType> Deref for ConsensusWriteLockGuard<'_, TYPES>
Source§impl<TYPES: NodeType> DerefMut for ConsensusWriteLockGuard<'_, TYPES>
impl<TYPES: NodeType> DerefMut for ConsensusWriteLockGuard<'_, TYPES>
Auto Trait Implementations§
impl<'a, TYPES> Freeze for ConsensusWriteLockGuard<'a, TYPES>
impl<'a, TYPES> !RefUnwindSafe for ConsensusWriteLockGuard<'a, TYPES>
impl<'a, TYPES> Send for ConsensusWriteLockGuard<'a, TYPES>
impl<'a, TYPES> Sync for ConsensusWriteLockGuard<'a, TYPES>
impl<'a, TYPES> Unpin for ConsensusWriteLockGuard<'a, TYPES>
impl<'a, TYPES> !UnwindSafe for ConsensusWriteLockGuard<'a, TYPES>
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> 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> 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> 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> 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.