Struct fuel_vm::interpreter::Interpreter
source · pub struct Interpreter<S, Tx = (), Ecal = NotSupportedEcal> { /* private fields */ }
Expand description
VM interpreter.
The internal state of the VM isn’t expose because the intended usage is to either inspect the resulting receipts after a transaction execution, or the resulting mutated transaction.
These can be obtained with the help of a crate::transactor::Transactor
or a client implementation.
Implementations§
source§impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>where
Tx: Default,
impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>where Tx: Default,
sourcepub fn with_storage(storage: S, interpreter_params: InterpreterParams) -> Self
pub fn with_storage(storage: S, interpreter_params: InterpreterParams) -> Self
Create a new interpreter instance out of a storage implementation.
If the provided storage implements
crate::storage::InterpreterStorage
, the returned interpreter
will provide full functionality.
source§impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>where
S: Clone,
Tx: ExecutableTransaction,
Ecal: Clone,
impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>where S: Clone, Tx: ExecutableTransaction, Ecal: Clone,
source§impl<Tx, Ecal> Interpreter<MemoryStorage, Tx, Ecal>where
Tx: ExecutableTransaction,
Ecal: EcalHandler,
impl<Tx, Ecal> Interpreter<MemoryStorage, Tx, Ecal>where Tx: ExecutableTransaction, Ecal: EcalHandler,
sourcepub fn with_memory_storage() -> Self
pub fn with_memory_storage() -> Self
Create a new storage with a provided in-memory storage.
It will have full capabilities.
source§impl<S, Tx, Ecal> Interpreter<Record<S>, Tx, Ecal>where
S: InterpreterStorage,
Tx: ExecutableTransaction,
impl<S, Tx, Ecal> Interpreter<Record<S>, Tx, Ecal>where S: InterpreterStorage, Tx: ExecutableTransaction,
sourcepub fn remove_recording(self) -> Interpreter<S, Tx, Ecal>
pub fn remove_recording(self) -> Interpreter<S, Tx, Ecal>
Remove the [Recording
] wrapper from the storage.
Recording storage changes has an overhead so it’s
useful to be able to remove it once the diff is generated.
sourcepub fn storage_diff(&self) -> Diff<Deltas>
pub fn storage_diff(&self) -> Diff<Deltas>
Get the diff of changes to this VMs storage.
source§impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>where
S: InterpreterStorage,
Tx: ExecutableTransaction,
impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>where S: InterpreterStorage, Tx: ExecutableTransaction,
sourcepub fn add_recording(self) -> Interpreter<Record<S>, Tx, Ecal>
pub fn add_recording(self) -> Interpreter<Record<S>, Tx, Ecal>
Add a [Recording
] wrapper around the storage to
record any changes this VM makes to it’s storage.
Recording storage changes has an overhead so should
be used in production.
sourcepub fn reset_vm_state(&mut self, diff: &Diff<InitialVmState>)where
Tx: Clone + 'static,
pub fn reset_vm_state(&mut self, diff: &Diff<InitialVmState>)where Tx: Clone + 'static,
Change this VMs internal state to match the initial state from this diff.
source§impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>
impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>
source§impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>where
S: InterpreterStorage,
Tx: ExecutableTransaction,
Ecal: EcalHandler,
impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>where S: InterpreterStorage, Tx: ExecutableTransaction, Ecal: EcalHandler,
sourcepub fn execute(
&mut self
) -> Result<ExecuteState, InterpreterError<S::DataError>>
pub fn execute( &mut self ) -> Result<ExecuteState, InterpreterError<S::DataError>>
Execute the current instruction located in $m[$pc]
.
sourcepub fn instruction<R: Into<RawInstruction> + Copy>(
&mut self,
raw: R
) -> Result<ExecuteState, InterpreterError<S::DataError>>
pub fn instruction<R: Into<RawInstruction> + Copy>( &mut self, raw: R ) -> Result<ExecuteState, InterpreterError<S::DataError>>
Execute a provided instruction
source§impl<Tx> Interpreter<PredicateStorage, Tx>where
Tx: ExecutableTransaction,
impl<Tx> Interpreter<PredicateStorage, Tx>where Tx: ExecutableTransaction,
sourcepub fn check_predicates(
checked: &Checked<Tx>,
params: &CheckPredicateParams
) -> Result<PredicatesChecked, PredicateVerificationFailed>where
<Tx as IntoChecked>::Metadata: CheckedMetadata,
pub fn check_predicates( checked: &Checked<Tx>, params: &CheckPredicateParams ) -> Result<PredicatesChecked, PredicateVerificationFailed>where <Tx as IntoChecked>::Metadata: CheckedMetadata,
Initialize the VM with the provided transaction and check all predicates defined in the inputs.
The storage provider is not used since contract opcodes are not allowed for predicates.
sourcepub async fn check_predicates_async<E>(
checked: &Checked<Tx>,
params: &CheckPredicateParams
) -> Result<PredicatesChecked, PredicateVerificationFailed>where
Tx: Send + 'static,
<Tx as IntoChecked>::Metadata: CheckedMetadata,
E: ParallelExecutor,
pub async fn check_predicates_async<E>( checked: &Checked<Tx>, params: &CheckPredicateParams ) -> Result<PredicatesChecked, PredicateVerificationFailed>where Tx: Send + 'static, <Tx as IntoChecked>::Metadata: CheckedMetadata, E: ParallelExecutor,
Initialize the VM with the provided transaction and check all predicates defined in the inputs in parallel.
The storage provider is not used since contract opcodes are not allowed for predicates.
sourcepub fn estimate_predicates(
transaction: &mut Tx,
params: &CheckPredicateParams
) -> Result<(), PredicateVerificationFailed>
pub fn estimate_predicates( transaction: &mut Tx, params: &CheckPredicateParams ) -> Result<(), PredicateVerificationFailed>
Initialize the VM with the provided transaction, check all predicates defined in the inputs and set the predicate_gas_used to be the actual gas consumed during execution for each predicate.
The storage provider is not used since contract opcodes are not allowed for predicates.
sourcepub async fn estimate_predicates_async<E>(
transaction: &mut Tx,
params: &CheckPredicateParams
) -> Result<(), PredicateVerificationFailed>where
Tx: Send + 'static,
E: ParallelExecutor,
pub async fn estimate_predicates_async<E>( transaction: &mut Tx, params: &CheckPredicateParams ) -> Result<(), PredicateVerificationFailed>where Tx: Send + 'static, E: ParallelExecutor,
Initialize the VM with the provided transaction, check all predicates defined in the inputs and set the predicate_gas_used to be the actual gas consumed during execution for each predicate in parallel.
The storage provider is not used since contract opcodes are not allowed for predicates.
source§impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>where
S: InterpreterStorage,
Tx: ExecutableTransaction,
<Tx as IntoChecked>::Metadata: CheckedMetadata,
Ecal: EcalHandler,
impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>where S: InterpreterStorage, Tx: ExecutableTransaction, <Tx as IntoChecked>::Metadata: CheckedMetadata, Ecal: EcalHandler,
sourcepub fn transact_owned(
storage: S,
tx: Checked<Tx>,
params: InterpreterParams
) -> Result<StateTransition<Tx>, InterpreterError<S::DataError>>
pub fn transact_owned( storage: S, tx: Checked<Tx>, params: InterpreterParams ) -> Result<StateTransition<Tx>, InterpreterError<S::DataError>>
Allocate internally a new instance of Interpreter
with the provided
storage, initialize it with the provided transaction and return the
result of th execution in form of StateTransition
sourcepub fn transact(
&mut self,
tx: Checked<Tx>
) -> Result<StateTransitionRef<'_, Tx>, InterpreterError<S::DataError>>
pub fn transact( &mut self, tx: Checked<Tx> ) -> Result<StateTransitionRef<'_, Tx>, InterpreterError<S::DataError>>
Initialize a pre-allocated instance of Interpreter
with the provided
transaction and execute it. The result will be bound to the lifetime
of the interpreter and will avoid unnecessary copy with the data
that can be referenced from the interpreter instance itself.
source§impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>where
S: InterpreterStorage,
impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>where S: InterpreterStorage,
sourcepub fn deploy(
&mut self,
tx: Checked<Create>
) -> Result<Create, InterpreterError<S::DataError>>
pub fn deploy( &mut self, tx: Checked<Create> ) -> Result<Create, InterpreterError<S::DataError>>
Deploys Create
transaction without initialization VM and without invalidation of
the last state of execution of the Script
transaction.
Returns Create
transaction with all modifications after execution.
source§impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>where
S: InterpreterStorage,
Tx: ExecutableTransaction,
Ecal: EcalHandler,
impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>where S: InterpreterStorage, Tx: ExecutableTransaction, Ecal: EcalHandler,
sourcepub fn resume(&mut self) -> Result<ProgramState, InterpreterError<S::DataError>>
pub fn resume(&mut self) -> Result<ProgramState, InterpreterError<S::DataError>>
Continue the execution from a previously interrupted program flow.
source§impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>where
S: InterpreterStorage,
Tx: ExecutableTransaction,
impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>where S: InterpreterStorage, Tx: ExecutableTransaction,
source§impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>
impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>
sourcepub fn remaining_gas(&self) -> Word
pub fn remaining_gas(&self) -> Word
Global remaining gas amount
sourcepub fn gas_charge(&mut self, gas: Word) -> SimpleResult<()>
pub fn gas_charge(&mut self, gas: Word) -> SimpleResult<()>
Do a gas charge with the given amount, panicing when running out of gas.
source§impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>where
Tx: ExecutableTransaction,
S: InterpreterStorage,
impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>where Tx: ExecutableTransaction, S: InterpreterStorage,
sourcepub fn init_predicate(
&mut self,
context: Context,
tx: Tx,
gas_limit: Word
) -> Result<(), InterpreterError<S::DataError>>
pub fn init_predicate( &mut self, context: Context, tx: Tx, gas_limit: Word ) -> Result<(), InterpreterError<S::DataError>>
Initialize the VM for a predicate context
source§impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>where
S: InterpreterStorage,
<S as InterpreterStorage>::DataError: From<S::DataError>,
Tx: ExecutableTransaction,
<Tx as IntoChecked>::Metadata: CheckedMetadata,
impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>where S: InterpreterStorage, <S as InterpreterStorage>::DataError: From<S::DataError>, Tx: ExecutableTransaction, <Tx as IntoChecked>::Metadata: CheckedMetadata,
sourcepub fn init_script(
&mut self,
checked: Checked<Tx>
) -> Result<(), InterpreterError<S::DataError>>
pub fn init_script( &mut self, checked: Checked<Tx> ) -> Result<(), InterpreterError<S::DataError>>
Initialize the VM with a given transaction, backed by a storage provider that allows execution of contract opcodes.
For predicate estimation and verification, check Self::init_predicate
source§impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>
impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>
sourcepub fn allocate(&mut self, a: Word) -> SimpleResult<()>
pub fn allocate(&mut self, a: Word) -> SimpleResult<()>
Expand heap by a
bytes.
source§impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>where
Tx: ExecutableTransaction,
impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>where Tx: ExecutableTransaction,
sourcepub const fn single_stepping(&self) -> bool
pub const fn single_stepping(&self) -> bool
Get single-stepping mode
sourcepub fn set_single_stepping(&mut self, single_stepping: bool)
pub fn set_single_stepping(&mut self, single_stepping: bool)
Set single-stepping mode
sourcepub fn set_breakpoint(&mut self, breakpoint: Breakpoint)
pub fn set_breakpoint(&mut self, breakpoint: Breakpoint)
Set a new breakpoint for the provided location.
sourcepub fn remove_breakpoint(&mut self, breakpoint: &Breakpoint)
pub fn remove_breakpoint(&mut self, breakpoint: &Breakpoint)
Remove a previously set breakpoint.
source§impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>
impl<S, Tx, Ecal> Interpreter<S, Tx, Ecal>
sourcepub fn memory_mut(&mut self) -> &mut [u8] ⓘ
pub fn memory_mut(&mut self) -> &mut [u8] ⓘ
Returns mutable access to the vm memory
sourcepub fn registers_mut(&mut self) -> &mut [Word]
pub fn registers_mut(&mut self) -> &mut [Word]
Returns mutable access to the registers
sourcepub fn transaction(&self) -> &Tx
pub fn transaction(&self) -> &Tx
The current transaction.
sourcepub fn initial_balances(&self) -> &InitialBalances
pub fn initial_balances(&self) -> &InitialBalances
The initial balances.
sourcepub fn max_inputs(&self) -> u8
pub fn max_inputs(&self) -> u8
Get max_inputs value
sourcepub fn fee_params(&self) -> &FeeParameters
pub fn fee_params(&self) -> &FeeParameters
Get the Fee Parameters
sourcepub fn base_asset_id(&self) -> &AssetId
pub fn base_asset_id(&self) -> &AssetId
Get the base Asset ID
sourcepub fn contract_max_size(&self) -> u64
pub fn contract_max_size(&self) -> u64
Get contract_max_size value
sourcepub fn max_message_data_length(&self) -> u64
pub fn max_message_data_length(&self) -> u64
Get max_message_data_length value
Trait Implementations§
source§impl<S, Tx, Ecal> AsMut<S> for Interpreter<S, Tx, Ecal>
impl<S, Tx, Ecal> AsMut<S> for Interpreter<S, Tx, Ecal>
source§impl<S, Tx, Ecal> AsRef<Interpreter<S, Tx, Ecal>> for Transactor<S, Tx, Ecal>where
Tx: ExecutableTransaction,
S: InterpreterStorage,
impl<S, Tx, Ecal> AsRef<Interpreter<S, Tx, Ecal>> for Transactor<S, Tx, Ecal>where Tx: ExecutableTransaction, S: InterpreterStorage,
source§fn as_ref(&self) -> &Interpreter<S, Tx, Ecal>
fn as_ref(&self) -> &Interpreter<S, Tx, Ecal>
source§impl<S, Tx, Ecal> AsRef<S> for Interpreter<S, Tx, Ecal>
impl<S, Tx, Ecal> AsRef<S> for Interpreter<S, Tx, Ecal>
source§impl<S: Clone, Tx: Clone, Ecal: Clone> Clone for Interpreter<S, Tx, Ecal>
impl<S: Clone, Tx: Clone, Ecal: Clone> Clone for Interpreter<S, Tx, Ecal>
source§fn clone(&self) -> Interpreter<S, Tx, Ecal>
fn clone(&self) -> Interpreter<S, Tx, Ecal>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl<S, Tx, Ecal> Default for Interpreter<S, Tx, Ecal>where
S: Default,
Tx: ExecutableTransaction,
Ecal: EcalHandler,
impl<S, Tx, Ecal> Default for Interpreter<S, Tx, Ecal>where S: Default, Tx: ExecutableTransaction, Ecal: EcalHandler,
source§impl<S, Tx, Ecal> From<Interpreter<S, Tx, Ecal>> for Transactor<S, Tx, Ecal>where
Tx: ExecutableTransaction,
S: InterpreterStorage,
impl<S, Tx, Ecal> From<Interpreter<S, Tx, Ecal>> for Transactor<S, Tx, Ecal>where Tx: ExecutableTransaction, S: InterpreterStorage,
source§fn from(interpreter: Interpreter<S, Tx, Ecal>) -> Self
fn from(interpreter: Interpreter<S, Tx, Ecal>) -> Self
source§impl<S, Tx, Ecal> From<Transactor<S, Tx, Ecal>> for Interpreter<S, Tx, Ecal>where
Tx: ExecutableTransaction,
S: InterpreterStorage,
impl<S, Tx, Ecal> From<Transactor<S, Tx, Ecal>> for Interpreter<S, Tx, Ecal>where Tx: ExecutableTransaction, S: InterpreterStorage,
source§fn from(transactor: Transactor<S, Tx, Ecal>) -> Self
fn from(transactor: Transactor<S, Tx, Ecal>) -> Self
source§impl<S, Tx, Ecal> PartialEq for Interpreter<S, Tx, Ecal>where
Tx: PartialEq,
impl<S, Tx, Ecal> PartialEq for Interpreter<S, Tx, Ecal>where Tx: PartialEq,
Auto Trait Implementations§
impl<S, Tx, Ecal> RefUnwindSafe for Interpreter<S, Tx, Ecal>where Ecal: RefUnwindSafe, S: RefUnwindSafe, Tx: RefUnwindSafe,
impl<S, Tx, Ecal> Send for Interpreter<S, Tx, Ecal>where Ecal: Send, S: Send, Tx: Send,
impl<S, Tx, Ecal> Sync for Interpreter<S, Tx, Ecal>where Ecal: Sync, S: Sync, Tx: Sync,
impl<S, Tx, Ecal> Unpin for Interpreter<S, Tx, Ecal>where Ecal: Unpin, S: Unpin, Tx: Unpin,
impl<S, Tx, Ecal> UnwindSafe for Interpreter<S, Tx, Ecal>where Ecal: UnwindSafe, S: UnwindSafe, Tx: UnwindSafe,
Blanket Implementations§
source§impl<T> AnyDebug for Twhere
T: Any + Debug,
impl<T> AnyDebug for Twhere T: Any + Debug,
source§fn as_any_ref(&self) -> &(dyn Any + 'static)
fn as_any_ref(&self) -> &(dyn Any + 'static)
Any
.§impl<A, T> AsMutBits<T> for Awhere
A: AsMut<[T]>,
T: BitStore,
impl<A, T> AsMutBits<T> for Awhere A: AsMut<[T]>, T: BitStore,
§fn as_mut_bits<O>(&mut self) -> &mut BitSlice<T, O> ⓘwhere
O: BitOrder,
fn as_mut_bits<O>(&mut self) -> &mut BitSlice<T, O> ⓘwhere O: BitOrder,
self
as a mutable bit-slice region with the O
ordering.§fn try_as_mut_bits<O>(&mut self) -> Result<&mut BitSlice<T, O>, BitSpanError<T>>where
O: BitOrder,
fn try_as_mut_bits<O>(&mut self) -> Result<&mut BitSlice<T, O>, BitSpanError<T>>where O: BitOrder,
§impl<T> Base32Len for Twhere
T: AsRef<[u8]>,
impl<T> Base32Len for Twhere T: AsRef<[u8]>,
§fn base32_len(&self) -> usize
fn base32_len(&self) -> usize
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> 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> 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) -> Rwhere
Self: Borrow<B>,
B: 'a + ?Sized,
R: 'a,
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere Self: Borrow<B>, B: 'a + ?Sized, R: 'a,
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> Rwhere
Self: BorrowMut<B>,
B: 'a + ?Sized,
R: 'a,
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> Rwhere Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere
Self: AsRef<U>,
U: 'a + ?Sized,
R: 'a,
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere Self: AsRef<U>, U: 'a + ?Sized, R: 'a,
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) -> Rwhere
Self: AsMut<U>,
U: 'a + ?Sized,
R: 'a,
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere Self: AsMut<U>, U: 'a + ?Sized, R: 'a,
self
, then passes self.as_mut()
into the pipe
function.source§impl<T> StorageAsMut for T
impl<T> StorageAsMut for T
fn storage<Type>(&mut self) -> StorageMut<'_, Self, Type>where Type: Mappable,
fn storage_as_mut<Type>(&mut self) -> StorageMut<'_, Self, Type>where Type: Mappable,
source§impl<T> StorageAsRef for T
impl<T> StorageAsRef for T
fn storage<Type>(&self) -> StorageRef<'_, Self, Type>where Type: Mappable,
fn storage_as_ref<Type>(&self) -> StorageRef<'_, Self, Type>where Type: Mappable,
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere Self: Borrow<B>, B: ?Sized,
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere Self: BorrowMut<B>, B: ?Sized,
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere Self: AsRef<R>, R: ?Sized,
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere Self: AsMut<R>, R: ?Sized,
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere
Self: Deref<Target = T>,
T: ?Sized,
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere Self: Deref<Target = T>, T: ?Sized,
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere Self: DerefMut<Target = T> + Deref, T: ?Sized,
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)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere Self: Borrow<B>, B: ?Sized,
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere Self: BorrowMut<B>, B: ?Sized,
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere Self: AsRef<R>, R: ?Sized,
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere Self: AsMut<R>, R: ?Sized,
.tap_ref_mut()
only in debug builds, and is erased in release
builds.source§impl<T> ToHex for Twhere
T: AsRef<[u8]>,
impl<T> ToHex for Twhere T: AsRef<[u8]>,
source§fn encode_hex<U>(&self) -> Uwhere
U: FromIterator<char>,
fn encode_hex<U>(&self) -> Uwhere U: FromIterator<char>,
self
into the result. Lower case
letters are used (e.g. f9b4ca
)source§fn encode_hex_upper<U>(&self) -> Uwhere
U: FromIterator<char>,
fn encode_hex_upper<U>(&self) -> Uwhere U: FromIterator<char>,
self
into the result. Upper case
letters are used (e.g. F9B4CA
)