pub struct Promise { /* private fields */ }Expand description
A structure representing a result of the scheduled execution on another contract.
Smart contract developers will explicitly use Promise in two situations:
-
When they need to return
Promise.In the following code if someone calls method
ContractA::athey will internally cause an execution of methodContractB::bofbob_nearaccount, and the return value ofContractA::awill be whatContractB::breturned.
#[ext_contract]
pub trait ContractB {
fn b(&mut self);
}
#[near(contract_state)]
#[derive(Default)]
struct ContractA {}
#[near]
impl ContractA {
pub fn a(&self) -> Promise {
contract_b::ext("bob_near".parse().unwrap()).b()
}
}- When they need to create a transaction with one or many actions, e.g. the following code schedules a transaction that creates an account, transfers tokens, and assigns a public key:
Promise::new("bob_near".parse().unwrap())
.create_account()
.transfer(NearToken::from_yoctonear(1000))
.add_full_access_key(env::signer_account_pk());More information about promises in NEAR documentation
Implementations§
Source§impl Promise
impl Promise
Sourcepub fn new(account_id: AccountId) -> Self
pub fn new(account_id: AccountId) -> Self
Create a promise that acts on the given account.
Uses low-level crate::env::promise_batch_create
Sourcepub fn new_yield(
function_name: &str,
arguments: impl AsRef<[u8]>,
gas: Gas,
weight: GasWeight,
) -> (Self, YieldId)
pub fn new_yield( function_name: &str, arguments: impl AsRef<[u8]>, gas: Gas, weight: GasWeight, ) -> (Self, YieldId)
Create a yielded promise that suspends execution until resumed.
Returns a tuple of (Promise, YieldId) where:
- The
Promiserepresents the yielded execution that will callfunction_namewhen resumed - The
YieldIdcan be stored and used later to resume the promise withYieldId::resume
§Arguments
function_name- The callback function to invoke when the promise is resumedarguments- Arguments to pass to the callback functiongas- Base gas to allocate for the callbackweight- Gas weight for distributing remaining gas
§Important
Yielded promises have a restriction:
- Cannot be used as continuations: Using a yielded promise in
other.then(yielded)will panic. Yielded promises must be first in the chain:yielded.then(other)is valid.
§Example
use near_sdk::{Promise, Gas, GasWeight};
// Create a yielded promise
let (promise, yield_id) = Promise::new_yield(
"on_data_received",
vec![],
Gas::from_tgas(10),
GasWeight(1),
);
// Chain another promise after the yielded one (valid)
promise.then(Promise::new("other.near".parse().unwrap()).create_account());
// Store yield_id to resume later from another transactionUses low-level crate::env::promise_yield_create
Sourcepub fn new_yield_with_id(
function_name: &str,
arguments: impl AsRef<[u8]>,
deposit: NearToken,
gas: Gas,
weight: GasWeight,
yield_id: UserYieldId,
) -> Option<Self>
pub fn new_yield_with_id( function_name: &str, arguments: impl AsRef<[u8]>, deposit: NearToken, gas: Gas, weight: GasWeight, yield_id: UserYieldId, ) -> Option<Self>
Create a yielded promise with a caller-provided UserYieldId and an optional deposit.
Like Promise::new_yield, but the caller supplies the resumption identifier instead of
the runtime generating one. The promise is later resumed with the same id via
UserYieldId::resume, so the creator and the resumer can derive the id independently
(e.g. from a request id) without round-tripping a runtime-generated data_id.
Returns None if a yield with the same yield_id is already pending for the current
account, letting the caller detect and recover from duplicates instead of aborting.
§Arguments
function_name- The callback function to invoke when the promise is resumedarguments- Arguments to pass to the callback functiondeposit- Amount of NEAR to attach to the callback (useNearToken::from_yoctonear(0)for none)gas- Base gas to allocate for the callbackweight- Gas weight for distributing remaining gasyield_id- The caller-provided 32-byte resumption identifier
§Requirements
Requires the host to support the yield-with-id functions (nearcore protocol version 85+, shipped in nearcore 2.13).
§Important
Like Promise::new_yield, the resulting promise cannot be used as a continuation
(other.then(yielded) panics); it must come first in a chain.
Uses low-level crate::env::promise_yield_create_with_id
Sourcepub fn create_account(self) -> Self
pub fn create_account(self) -> Self
Create account on which this promise acts.
Uses low-level crate::env::promise_batch_action_create_account
Sourcepub fn deploy_contract(self, code: impl Into<Vec<u8>>) -> Self
pub fn deploy_contract(self, code: impl Into<Vec<u8>>) -> Self
Deploy a smart contract to the account on which this promise acts.
Uses low-level crate::env::promise_batch_action_deploy_contract
Sourcepub fn deploy_global_contract(self, code: impl Into<Vec<u8>>) -> Self
pub fn deploy_global_contract(self, code: impl Into<Vec<u8>>) -> Self
Deploy a global smart contract using the provided contract code.
Uses low-level crate::env::promise_batch_action_deploy_global_contract
§Examples
use near_sdk::{Promise, NearToken};
let code = vec![0u8; 100]; // Contract bytecode
Promise::new("alice.near".parse().unwrap())
.create_account()
.transfer(NearToken::from_yoctonear(1000))
.deploy_global_contract(code);Sourcepub fn deploy_global_contract_by_account_id(
self,
code: impl Into<Vec<u8>>,
) -> Self
pub fn deploy_global_contract_by_account_id( self, code: impl Into<Vec<u8>>, ) -> Self
Deploy a global smart contract, identifiable by the predecessor’s account ID.
Uses low-level crate::env::promise_batch_action_deploy_global_contract_by_account_id
§Examples
use near_sdk::{Promise, NearToken};
let code = vec![0u8; 100]; // Contract bytecode
Promise::new("alice.near".parse().unwrap())
.create_account()
.transfer(NearToken::from_yoctonear(1000))
.deploy_global_contract_by_account_id(code);Sourcepub fn use_global_contract(self, code_hash: impl Into<CryptoHash>) -> Self
pub fn use_global_contract(self, code_hash: impl Into<CryptoHash>) -> Self
Use an existing global contract by code hash.
Uses low-level crate::env::promise_batch_action_use_global_contract
§Examples
use near_sdk::{Promise, NearToken};
let code_hash = [0u8; 32]; // 32-byte hash (CryptoHash)
Promise::new("alice.near".parse().unwrap())
.create_account()
.transfer(NearToken::from_yoctonear(1000))
.use_global_contract(code_hash);Sourcepub fn use_global_contract_by_account_id(self, account_id: AccountId) -> Self
pub fn use_global_contract_by_account_id(self, account_id: AccountId) -> Self
Use an existing global contract by referencing the account that deployed it.
Uses low-level crate::env::promise_batch_action_use_global_contract_by_account_id
§Examples
use near_sdk::{Promise, NearToken};
Promise::new("alice.near".parse().unwrap())
.create_account()
.transfer(NearToken::from_yoctonear(1000))
.use_global_contract_by_account_id("deployer.near".parse().unwrap());Sourcepub fn function_call(
self,
function_name: impl Into<String>,
arguments: impl Into<Vec<u8>>,
amount: NearToken,
gas: Gas,
) -> Self
pub fn function_call( self, function_name: impl Into<String>, arguments: impl Into<Vec<u8>>, amount: NearToken, gas: Gas, ) -> Self
A low-level interface for making a function call to the account that this promise acts on.
Uses low-level crate::env::promise_batch_action_function_call
Sourcepub fn function_call_weight(
self,
function_name: impl Into<String>,
arguments: impl Into<Vec<u8>>,
amount: NearToken,
gas: Gas,
weight: GasWeight,
) -> Self
pub fn function_call_weight( self, function_name: impl Into<String>, arguments: impl Into<Vec<u8>>, amount: NearToken, gas: Gas, weight: GasWeight, ) -> Self
A low-level interface for making a function call to the account that this promise acts on.
unlike Promise::function_call, this function accepts a weight to use relative unused gas
on this function call at the end of the scheduling method execution.
Uses low-level crate::env::promise_batch_action_function_call_weight
Sourcepub fn transfer(self, amount: NearToken) -> Self
pub fn transfer(self, amount: NearToken) -> Self
Transfer tokens to the account that this promise acts on.
Uses low-level crate::env::promise_batch_action_transfer
Sourcepub fn stake(self, amount: NearToken, public_key: PublicKey) -> Self
pub fn stake(self, amount: NearToken, public_key: PublicKey) -> Self
Stake the account for the given amount of tokens using the given public key.
Uses low-level crate::env::promise_batch_action_stake
Sourcepub fn add_full_access_key(self, public_key: PublicKey) -> Self
pub fn add_full_access_key(self, public_key: PublicKey) -> Self
Add full access key to the given account.
Uses low-level crate::env::promise_batch_action_add_key_with_full_access
Sourcepub fn add_full_access_key_with_nonce(
self,
public_key: PublicKey,
nonce: u64,
) -> Self
pub fn add_full_access_key_with_nonce( self, public_key: PublicKey, nonce: u64, ) -> Self
Add full access key to the given account with a provided nonce.
Uses low-level crate::env::promise_batch_action_add_key_with_full_access
Sourcepub fn add_access_key_allowance(
self,
public_key: PublicKey,
allowance: Allowance,
receiver_id: AccountId,
function_names: impl Into<String>,
) -> Self
pub fn add_access_key_allowance( self, public_key: PublicKey, allowance: Allowance, receiver_id: AccountId, function_names: impl Into<String>, ) -> Self
Add an access key that is restricted to only calling a smart contract on some account using
only a restricted set of methods. Here function_names is a comma separated list of methods,
e.g. "method_a,method_b".
Uses low-level crate::env::promise_batch_action_add_key_allowance_with_function_call
pub fn add_access_key( self, public_key: PublicKey, allowance: NearToken, receiver_id: AccountId, function_names: impl Into<String>, ) -> Self
Use add_access_key_allowance instead
Sourcepub fn add_access_key_allowance_with_nonce(
self,
public_key: PublicKey,
allowance: Allowance,
receiver_id: AccountId,
function_names: impl Into<String>,
nonce: u64,
) -> Self
pub fn add_access_key_allowance_with_nonce( self, public_key: PublicKey, allowance: Allowance, receiver_id: AccountId, function_names: impl Into<String>, nonce: u64, ) -> Self
Add an access key with a provided nonce.
Uses low-level crate::env::promise_batch_action_add_key_allowance_with_function_call
pub fn add_access_key_with_nonce( self, public_key: PublicKey, allowance: NearToken, receiver_id: AccountId, function_names: impl Into<String>, nonce: u64, ) -> Self
Use add_access_key_allowance_with_nonce instead
Sourcepub fn delete_key(self, public_key: PublicKey) -> Self
pub fn delete_key(self, public_key: PublicKey) -> Self
Delete access key from the given account.
Uses low-level crate::env::promise_batch_action_delete_key
Sourcepub fn delete_account(self, beneficiary_id: AccountId) -> Self
pub fn delete_account(self, beneficiary_id: AccountId) -> Self
Delete the given account.
Uses low-level crate::env::promise_batch_action_delete_account
Sourcepub fn transfer_to_gas_key(
self,
public_key: PublicKey,
amount: NearToken,
) -> Self
pub fn transfer_to_gas_key( self, public_key: PublicKey, amount: NearToken, ) -> Self
Transfer tokens to a gas key on the account that this promise acts on.
Uses low-level crate::env::promise_batch_action_transfer_to_gas_key
§Requirements
Requires the host to support gas-key host functions (nearcore protocol version 85+, shipped in nearcore 2.13).
Sourcepub fn add_gas_key_full_access(
self,
public_key: PublicKey,
num_nonces: u32,
) -> Self
pub fn add_gas_key_full_access( self, public_key: PublicKey, num_nonces: u32, ) -> Self
Add a full access gas key to the given account, reserving num_nonces parallel nonces.
Uses low-level crate::env::promise_batch_action_add_gas_key_with_full_access
§Requirements
Requires the host to support gas-key host functions (nearcore protocol version 85+, shipped in nearcore 2.13).
Sourcepub fn add_gas_key_allowance_function_call(
self,
public_key: PublicKey,
num_nonces: u32,
allowance: Allowance,
receiver_id: AccountId,
function_names: String,
) -> Self
pub fn add_gas_key_allowance_function_call( self, public_key: PublicKey, num_nonces: u32, allowance: Allowance, receiver_id: AccountId, function_names: String, ) -> Self
Add a gas key restricted to only calling a smart contract on some account using only a
restricted set of methods, reserving num_nonces parallel nonces. Here function_names
is a comma separated list of methods, e.g. "method_a,method_b".
Uses low-level crate::env::promise_batch_action_add_gas_key_with_function_call
§Requirements
Requires the host to support gas-key host functions (nearcore protocol version 85+, shipped in nearcore 2.13).
Sourcepub fn and(self, other: Promise) -> Promise
pub fn and(self, other: Promise) -> Promise
Merge this promise with another promise, so that we can schedule execution of another smart contract right after all merged promises finish.
Note, once the promises are merged it is not possible to add actions to them, e.g. the following code will panic during the execution of the smart contract:
let p1 = Promise::new("bob_near".parse().unwrap()).create_account();
let p2 = Promise::new("carol_near".parse().unwrap()).create_account();
let p3 = p1.and(p2);
// p3.create_account();Uses low-level crate::env::promise_and
Sourcepub fn then(self, other: Promise) -> Promise
pub fn then(self, other: Promise) -> Promise
Schedules execution of another promise right after the current promise finish executing.
In the following code bob_near and dave_near will be created concurrently. carol_near
creation will wait for bob_near to be created, and eva_near will wait for both carol_near
and dave_near to be created first.
let p1 = Promise::new("bob_near".parse().unwrap()).create_account();
let p2 = Promise::new("carol_near".parse().unwrap()).create_account();
let p3 = Promise::new("dave_near".parse().unwrap()).create_account();
let p4 = Promise::new("eva_near".parse().unwrap()).create_account();
p1.then(p2).and(p3).then(p4);Uses low-level crate::env::promise_batch_then
Sourcepub fn then_concurrent(
self,
promises: impl IntoIterator<Item = Promise>,
) -> ConcurrentPromises
pub fn then_concurrent( self, promises: impl IntoIterator<Item = Promise>, ) -> ConcurrentPromises
Schedules execution of multiple concurrent promises right after the current promise finishes executing.
This method will send the same return value as a data receipt to all following receipts.
In the following code, bob_near is created first, carol_near second,
and finally dave_near and eva_near are created concurrently.
let p1 = Promise::new("bob_near".parse().unwrap()).create_account();
let p2 = Promise::new("carol_near".parse().unwrap()).create_account();
let p3 = Promise::new("dave_near".parse().unwrap()).create_account();
let p4 = Promise::new("eva_near".parse().unwrap()).create_account();
p1.then(p2).then_concurrent([p3, p4]);The returned ConcurrentPromises allows chaining more promises.
In the following code, bob_near is created first, next carol_near
and dave_near are created concurrently, and finally eva_near is
created after all others have been created.
let p1 = Promise::new("bob_near".parse().unwrap()).create_account();
let p2 = Promise::new("carol_near".parse().unwrap()).create_account();
let p3 = Promise::new("dave_near".parse().unwrap()).create_account();
let p4 = Promise::new("eva_near".parse().unwrap()).create_account();
p1.then_concurrent([p2, p3]).join().then(p4);Sourcepub fn as_return(self) -> Self
pub fn as_return(self) -> Self
A specialized, relatively low-level API method. Allows to mark the given promise as the one that should be considered as a return value.
In the below code a1 and a2 functions are equivalent.
#[ext_contract]
pub trait ContractB {
fn b(&mut self);
}
#[near(contract_state)]
#[derive(Default)]
struct ContractA {}
#[near]
impl ContractA {
pub fn a1(&self) {
contract_b::ext("bob_near".parse().unwrap()).b().as_return();
}
pub fn a2(&self) -> Promise {
contract_b::ext("bob_near".parse().unwrap()).b()
}
}Makes the promise to use low-level crate::env::promise_return.
Trait Implementations§
Source§impl BorshSchema for Promise
Available on crate feature abi only.Until we implement strongly typed promises we serialize them as unit struct.
impl BorshSchema for Promise
abi only.Until we implement strongly typed promises we serialize them as unit struct.
Source§fn add_definitions_recursively(
definitions: &mut BTreeMap<Declaration, Definition>,
)
fn add_definitions_recursively( definitions: &mut BTreeMap<Declaration, Definition>, )
Source§fn declaration() -> Declaration
fn declaration() -> Declaration
Source§impl BorshSerialize for Promise
impl BorshSerialize for Promise
Source§impl<T> From<Promise> for PromiseOrValue<T>
impl<T> From<Promise> for PromiseOrValue<T>
Source§impl JsonSchema for Promise
Available on crate feature abi only.
impl JsonSchema for Promise
abi only.Source§fn schema_name() -> String
fn schema_name() -> String
Source§fn json_schema(_gen: &mut SchemaGenerator) -> Schema
fn json_schema(_gen: &mut SchemaGenerator) -> Schema
Source§fn is_referenceable() -> bool
fn is_referenceable() -> bool
$ref keyword. Read moreAuto Trait Implementations§
impl !Freeze for Promise
impl !RefUnwindSafe for Promise
impl !Send for Promise
impl !Sync for Promise
impl !UnwindSafe for Promise
impl Unpin for Promise
impl UnsafeUnpin for Promise
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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<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 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::RequestSource§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
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> SpanWrappedMessageExt for T
impl<T> SpanWrappedMessageExt for T
fn span_wrap(self) -> SpanWrapped<Self>
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.