Struct forest_filecoin::state_manager::StateManager
source · pub struct StateManager<DB> {
cs: Arc<ChainStore<DB>>,
cache: TipsetStateCache,
beacon: Arc<BeaconSchedule>,
chain_config: Arc<ChainConfig>,
sync_config: Arc<SyncConfig>,
engine: MultiEngine,
}
Expand description
State manager handles all interactions with the internal Filecoin actors
state. This encapsulates the ChainStore
functionality, which only
handles chain data, to allow for interactions with the underlying state of
the chain. The state manager not only allows interfacing with state, but
also is used when performing state transitions.
Fields§
§cs: Arc<ChainStore<DB>>
§cache: TipsetStateCache
This is a cache which indexes tipsets to their calculated state.
beacon: Arc<BeaconSchedule>
§chain_config: Arc<ChainConfig>
§sync_config: Arc<SyncConfig>
§engine: MultiEngine
Implementations§
source§impl<DB> StateManager<DB>where
DB: Blockstore,
impl<DB> StateManager<DB>where
DB: Blockstore,
sourcepub fn get_sectors_for_winning_post(
&self,
st: &Cid,
nv: NetworkVersion,
miner_address: &Address,
rand: Randomness,
) -> Result<Vec<ExtendedSectorInfo>, Error>
pub fn get_sectors_for_winning_post( &self, st: &Cid, nv: NetworkVersion, miner_address: &Address, rand: Randomness, ) -> Result<Vec<ExtendedSectorInfo>, Error>
Retrieves and generates a vector of sector info for the winning PoSt
verification.
source§impl<DB> StateManager<DB>where
DB: Blockstore,
impl<DB> StateManager<DB>where
DB: Blockstore,
pub fn new( cs: Arc<ChainStore<DB>>, chain_config: Arc<ChainConfig>, sync_config: Arc<SyncConfig>, ) -> Result<Self, Error>
pub fn beacon_schedule(&self) -> &Arc<BeaconSchedule>
sourcepub fn get_network_version(&self, epoch: i64) -> NetworkVersion
pub fn get_network_version(&self, epoch: i64) -> NetworkVersion
Returns network version for the given epoch.
pub fn chain_config(&self) -> &Arc<ChainConfig>
pub fn sync_config(&self) -> &Arc<SyncConfig>
sourcepub fn get_state_tree(&self, state_cid: &Cid) -> Result<StateTree<DB>>
pub fn get_state_tree(&self, state_cid: &Cid) -> Result<StateTree<DB>>
Gets the state tree
sourcepub fn get_actor(
&self,
addr: &Address,
state_cid: Cid,
) -> Result<Option<ActorState>>
pub fn get_actor( &self, addr: &Address, state_cid: Cid, ) -> Result<Option<ActorState>>
Gets actor from given Cid
, if it exists.
sourcepub fn get_actor_state<S: LoadActorStateFromBlockstore>(
&self,
ts: &Tipset,
) -> Result<S>
pub fn get_actor_state<S: LoadActorStateFromBlockstore>( &self, ts: &Tipset, ) -> Result<S>
Gets actor state from implicit actor address
sourcepub fn get_actor_state_from_address<S: LoadActorStateFromBlockstore>(
&self,
ts: &Tipset,
actor_address: &Address,
) -> Result<S>
pub fn get_actor_state_from_address<S: LoadActorStateFromBlockstore>( &self, ts: &Tipset, actor_address: &Address, ) -> Result<S>
Gets actor state from explicit actor address
sourcepub fn get_required_actor(
&self,
addr: &Address,
state_cid: Cid,
) -> Result<ActorState>
pub fn get_required_actor( &self, addr: &Address, state_cid: Cid, ) -> Result<ActorState>
Gets required actor from given Cid
.
sourcepub fn blockstore(&self) -> &DB
pub fn blockstore(&self) -> &DB
Returns a reference to the state manager’s Blockstore
.
pub fn blockstore_owned(&self) -> Arc<DB>
sourcepub fn chain_store(&self) -> &Arc<ChainStore<DB>>
pub fn chain_store(&self) -> &Arc<ChainStore<DB>>
Returns reference to the state manager’s ChainStore
.
pub fn chain_rand(&self, tipset: Arc<Tipset>) -> ChainRand<DB>
sourcepub fn get_network_name(&self, st: &Cid) -> Result<String, Error>
pub fn get_network_name(&self, st: &Cid) -> Result<String, Error>
Returns the internal, protocol-level network name.
sourcepub fn is_miner_slashed(
&self,
addr: &Address,
state_cid: &Cid,
) -> Result<bool, Error>
pub fn is_miner_slashed( &self, addr: &Address, state_cid: &Cid, ) -> Result<bool, Error>
Returns true if miner has been slashed or is considered invalid.
sourcepub fn get_miner_work_addr(
&self,
state_cid: Cid,
addr: &Address,
) -> Result<Address, Error>
pub fn get_miner_work_addr( &self, state_cid: Cid, addr: &Address, ) -> Result<Address, Error>
Returns raw work address of a miner given the state root.
sourcepub fn get_power(
&self,
state_cid: &Cid,
addr: Option<&Address>,
) -> Result<Option<(Claim, Claim)>, Error>
pub fn get_power( &self, state_cid: &Cid, addr: Option<&Address>, ) -> Result<Option<(Claim, Claim)>, Error>
Returns specified actor’s claimed power and total network power as a tuple.
pub fn get_all_sectors( self: &Arc<Self>, addr: &Address, ts: &Tipset, ) -> Result<Vec<SectorOnChainInfo>>
source§impl<DB> StateManager<DB>
impl<DB> StateManager<DB>
sourcepub async fn tipset_state(
self: &Arc<Self>,
tipset: &Arc<Tipset>,
) -> Result<(Cid, Cid)>
pub async fn tipset_state( self: &Arc<Self>, tipset: &Arc<Tipset>, ) -> Result<(Cid, Cid)>
Returns the pair of (parent state root, message receipt root). This will either be cached or will be calculated and fill the cache. Tipset state for a given tipset is guaranteed not to be computed twice.
fn call_raw( self: &Arc<Self>, msg: &Message, rand: ChainRand<DB>, tipset: &Arc<Tipset>, ) -> Result<ApiInvocResult, Error>
sourcepub fn call(
self: &Arc<Self>,
message: &Message,
tipset: Option<Arc<Tipset>>,
) -> Result<ApiInvocResult, Error>
pub fn call( self: &Arc<Self>, message: &Message, tipset: Option<Arc<Tipset>>, ) -> Result<ApiInvocResult, Error>
runs the given message and returns its result without any persisted changes.
sourcepub async fn call_with_gas(
self: &Arc<Self>,
message: &mut ChainMessage,
prior_messages: &[ChainMessage],
tipset: Option<Arc<Tipset>>,
trace_config: VMTrace,
) -> Result<(InvocResult, ApplyRet), Error>
pub async fn call_with_gas( self: &Arc<Self>, message: &mut ChainMessage, prior_messages: &[ChainMessage], tipset: Option<Arc<Tipset>>, trace_config: VMTrace, ) -> Result<(InvocResult, ApplyRet), Error>
Computes message on the given Tipset state, after applying other messages and returns the values computed in the VM.
sourcepub async fn replay(
self: &Arc<Self>,
ts: Arc<Tipset>,
mcid: Cid,
) -> Result<ApiInvocResult, Error>
pub async fn replay( self: &Arc<Self>, ts: Arc<Tipset>, mcid: Cid, ) -> Result<ApiInvocResult, Error>
Replays the given message and returns the result of executing the indicated message, assuming it was executed in the indicated tipset.
sourcepub fn replay_blocking(
self: &Arc<Self>,
ts: Arc<Tipset>,
mcid: Cid,
) -> Result<ApiInvocResult, Error>
pub fn replay_blocking( self: &Arc<Self>, ts: Arc<Tipset>, mcid: Cid, ) -> Result<ApiInvocResult, Error>
Blocking version of replay
sourcepub fn eligible_to_mine(
&self,
address: &Address,
base_tipset: &Tipset,
lookback_tipset: &Tipset,
) -> Result<bool, Error>
pub fn eligible_to_mine( &self, address: &Address, base_tipset: &Tipset, lookback_tipset: &Tipset, ) -> Result<bool, Error>
Checks the eligibility of the miner. This is used in the validation that a block’s miner has the requirements to mine a block.
sourcepub async fn compute_tipset_state(
self: &Arc<Self>,
tipset: Arc<Tipset>,
callback: Option<impl FnMut(MessageCallbackCtx<'_>) -> Result<()> + Send + 'static>,
enable_tracing: VMTrace,
) -> Result<(Cid, Cid), Error>
pub async fn compute_tipset_state( self: &Arc<Self>, tipset: Arc<Tipset>, callback: Option<impl FnMut(MessageCallbackCtx<'_>) -> Result<()> + Send + 'static>, enable_tracing: VMTrace, ) -> Result<(Cid, Cid), Error>
Conceptually, a Tipset
consists of blocks which share an epoch.
Each block contains messages, which are executed by the Filecoin Virtual Machine.
VM message execution essentially looks like this:
state[N-900..N] * message = state[N+1]
The state
s above are stored in the IPLD Blockstore
, and can be referred to by
a Cid
- the state root.
The previous 900 states (configurable, see
https://docs.filecoin.io/reference/general/glossary/#finality) can be
queried when executing a message, so a store needs at least that many.
(a snapshot typically contains 2000, for example).
Each message costs FIL to execute - this is gas.
After execution, the message has a receipt, showing how much gas was spent.
This is similarly a Cid
into the block store.
For details, see the documentation for apply_block_messages
.
sourcepub fn compute_tipset_state_blocking(
&self,
tipset: Arc<Tipset>,
callback: Option<impl FnMut(MessageCallbackCtx<'_>) -> Result<()>>,
enable_tracing: VMTrace,
) -> Result<(Cid, Cid), Error>
pub fn compute_tipset_state_blocking( &self, tipset: Arc<Tipset>, callback: Option<impl FnMut(MessageCallbackCtx<'_>) -> Result<()>>, enable_tracing: VMTrace, ) -> Result<(Cid, Cid), Error>
Blocking version of compute_tipset_state
sourcefn tipset_executed_message(
&self,
tipset: &Tipset,
message: &ChainMessage,
allow_replaced: bool,
) -> Result<Option<Receipt>, Error>
fn tipset_executed_message( &self, tipset: &Tipset, message: &ChainMessage, allow_replaced: bool, ) -> Result<Option<Receipt>, Error>
Check if tipset had executed the message, by loading the receipt based on the index of the message in the block.
fn check_search( &self, current: Arc<Tipset>, message: &ChainMessage, look_back_limit: Option<i64>, allow_replaced: Option<bool>, ) -> Result<Option<(Arc<Tipset>, Receipt)>, Error>
fn search_back_for_message( &self, current: Arc<Tipset>, message: &ChainMessage, look_back_limit: Option<i64>, allow_replaced: Option<bool>, ) -> Result<Option<(Arc<Tipset>, Receipt)>, Error>
sourcepub fn get_receipt(
&self,
tipset: Arc<Tipset>,
msg: Cid,
) -> Result<Receipt, Error>
pub fn get_receipt( &self, tipset: Arc<Tipset>, msg: Cid, ) -> Result<Receipt, Error>
Returns a message receipt from a given tipset and message CID.
sourcepub async fn wait_for_message(
self: &Arc<Self>,
msg_cid: Cid,
confidence: i64,
look_back_limit: Option<i64>,
allow_replaced: Option<bool>,
) -> Result<(Option<Arc<Tipset>>, Option<Receipt>), Error>
pub async fn wait_for_message( self: &Arc<Self>, msg_cid: Cid, confidence: i64, look_back_limit: Option<i64>, allow_replaced: Option<bool>, ) -> Result<(Option<Arc<Tipset>>, Option<Receipt>), Error>
WaitForMessage
blocks until a message appears on chain. It looks
backwards in the chain to see if this has already happened. It
guarantees that the message has been on chain for at least
confidence epochs without being reverted before returning.
pub async fn search_for_message( self: &Arc<Self>, from: Option<Arc<Tipset>>, msg_cid: Cid, look_back_limit: Option<i64>, allow_replaced: Option<bool>, ) -> Result<Option<(Arc<Tipset>, Receipt)>, Error>
sourcepub fn get_bls_public_key(
db: &Arc<DB>,
addr: &Address,
state_cid: Cid,
) -> Result<BlsPublicKey, Error>
pub fn get_bls_public_key( db: &Arc<DB>, addr: &Address, state_cid: Cid, ) -> Result<BlsPublicKey, Error>
Returns a BLS public key from provided address
sourcepub fn market_balance(
&self,
addr: &Address,
ts: &Tipset,
) -> Result<MarketBalance, Error>
pub fn market_balance( &self, addr: &Address, ts: &Tipset, ) -> Result<MarketBalance, Error>
Retrieves market balance in escrow and locked tables.
sourcepub fn miner_info(
&self,
addr: &Address,
ts: &Tipset,
) -> Result<MinerInfo, Error>
pub fn miner_info( &self, addr: &Address, ts: &Tipset, ) -> Result<MinerInfo, Error>
Retrieves miner info.
sourcepub fn miner_faults(
&self,
addr: &Address,
ts: &Tipset,
) -> Result<BitField, Error>
pub fn miner_faults( &self, addr: &Address, ts: &Tipset, ) -> Result<BitField, Error>
Retrieves miner faults.
sourcepub fn miner_recoveries(
&self,
addr: &Address,
ts: &Tipset,
) -> Result<BitField, Error>
pub fn miner_recoveries( &self, addr: &Address, ts: &Tipset, ) -> Result<BitField, Error>
Retrieves miner recoveries.
fn all_partition_sectors( &self, addr: &Address, ts: &Tipset, get_sector: impl Fn(Partition<'_>) -> BitField, ) -> Result<BitField, Error>
sourcepub fn miner_power(
&self,
addr: &Address,
ts: &Tipset,
) -> Result<MinerPower, Error>
pub fn miner_power( &self, addr: &Address, ts: &Tipset, ) -> Result<MinerPower, Error>
Retrieves miner power.
sourcepub async fn resolve_to_key_addr(
self: &Arc<Self>,
addr: &Address,
ts: &Arc<Tipset>,
) -> Result<Address, Error>
pub async fn resolve_to_key_addr( self: &Arc<Self>, addr: &Address, ts: &Arc<Tipset>, ) -> Result<Address, Error>
Similar to resolve_to_key_addr
in the forest_vm
crate::state_manager
but does not
allow Actor
type of addresses. Uses ts
to generate the VM state.
pub async fn miner_get_base_info( self: &Arc<Self>, beacon_schedule: &BeaconSchedule, tipset: Arc<Tipset>, addr: Address, epoch: i64, ) -> Result<Option<MiningBaseInfo>>
sourcepub fn miner_has_min_power(
&self,
policy: &Policy,
addr: &Address,
ts: &Tipset,
) -> Result<bool>
pub fn miner_has_min_power( &self, policy: &Policy, addr: &Address, ts: &Tipset, ) -> Result<bool>
Checks power actor state for if miner meets consensus minimum requirements.
sourcepub fn validate_range(
self: &Arc<Self>,
epochs: RangeInclusive<i64>,
) -> Result<()>
pub fn validate_range( self: &Arc<Self>, epochs: RangeInclusive<i64>, ) -> Result<()>
Validates all tipsets at epoch start..=end
behind the heaviest tipset.
This spawns rayon::current_num_threads
threads to do the compute-heavy work
of tipset validation.
§What is validation?
Every state transition returns a new state root, which is typically retained in, e.g., snapshots. For “full” snapshots, all state roots are retained. For standard snapshots, the last 2000 or so state roots are retained.
receipts meanwhile, are typically ephemeral, but each tipset knows the receipt root (hash) of the previous tipset.
This function takes advantage of that fact to validate tipsets:
tipset[N]
claims thatreceipt_root[N-1]
should be0xDEADBEEF
- find
tipset[N-1]
, and perform its state transition to get the actualreceipt_root
- assert that they match
See Self::compute_tipset_state_blocking
for an explanation of state transitions.
§Known issues
This function is blocking, but we do observe threads waiting and synchronizing.
This is suspected to be due something in the VM or its WASM
runtime.
pub fn validate_tipsets<T>(self: &Arc<Self>, tipsets: T) -> Result<()>
pub fn get_verified_registry_actor_state(&self, ts: &Tipset) -> Result<State>
pub fn get_claim( &self, addr: &Address, ts: &Tipset, claim_id: ClaimID, ) -> Result<Option<Claim>>
pub fn get_all_claims(&self, ts: &Tipset) -> Result<HashMap<ClaimID, Claim>>
pub fn get_allocation( &self, addr: &Address, ts: &Tipset, allocation_id: AllocationID, ) -> Result<Option<Allocation>>
pub fn get_all_allocations( &self, ts: &Tipset, ) -> Result<HashMap<AllocationID, Allocation>>
pub fn verified_client_status( &self, addr: &Address, ts: &Tipset, ) -> Result<Option<DataCap>>
pub async fn resolve_to_deterministic_address( self: &Arc<Self>, address: Address, ts: Arc<Tipset>, ) -> Result<Address>
Auto Trait Implementations§
impl<DB> !Freeze for StateManager<DB>
impl<DB> !RefUnwindSafe for StateManager<DB>
impl<DB> Send for StateManager<DB>
impl<DB> Sync for StateManager<DB>
impl<DB> Unpin for StateManager<DB>
impl<DB> !UnwindSafe for StateManager<DB>
Blanket Implementations§
source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
source§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> FmtForward for T
impl<T> FmtForward for T
source§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.source§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.source§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.source§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.source§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.source§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.source§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.source§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.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 moresource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request
source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
source§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 moresource§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 moresource§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
source§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
source§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.source§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.source§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.source§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<T> References<RawCodec> for T
impl<T> References<RawCodec> for T
source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self
from the equivalent element of its
superset. Read moresource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self
is actually part of its subset T
(and can be converted to it).source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset
but without any property checks. Always succeeds.source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self
to the equivalent element of its superset.source§impl<T> Tap for T
impl<T> Tap for T
source§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 moresource§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 moresource§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 moresource§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 moresource§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 moresource§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 moresource§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.source§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.source§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.source§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.source§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.source§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.source§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.