Struct pallet_nomination_pools::pallet::Pallet
source · pub struct Pallet<T>(_);
Expand description
The pallet implementing the on-chain logic.
Implementations§
source§impl<T: Config> Pallet<T>
impl<T: Config> Pallet<T>
sourcepub fn join(
origin: OriginFor<T>,
amount: BalanceOf<T>,
pool_id: PoolId
) -> DispatchResult
pub fn join( origin: OriginFor<T>, amount: BalanceOf<T>, pool_id: PoolId ) -> DispatchResult
Stake funds with a pool. The amount to bond is transferred from the member to the pools account and immediately increases the pools bond.
Note
- An account can only be a member of a single pool.
- An account cannot join the same pool multiple times.
- This call will not dust the member account, so the member must have at least
existential deposit + amount
in their account. - Only a pool with
PoolState::Open
can be joined
sourcepub fn bond_extra(
origin: OriginFor<T>,
extra: BondExtra<BalanceOf<T>>
) -> DispatchResult
pub fn bond_extra( origin: OriginFor<T>, extra: BondExtra<BalanceOf<T>> ) -> DispatchResult
Bond extra
more funds from origin
into the pool to which they already belong.
Additional funds can come from either the free balance of the account, of from the
accumulated rewards, see BondExtra
.
Bonding extra funds implies an automatic payout of all pending rewards as well.
sourcepub fn claim_payout(origin: OriginFor<T>) -> DispatchResult
pub fn claim_payout(origin: OriginFor<T>) -> DispatchResult
A bonded member can use this to claim their payout based on the rewards that the pool has accumulated since their last claimed payout (OR since joining if this is there first time claiming rewards). The payout will be transferred to the member’s account.
The member will earn rewards pro rata based on the members stake vs the sum of the members in the pools stake. Rewards do not “expire”.
sourcepub fn unbond(
origin: OriginFor<T>,
member_account: <<T as Config>::Lookup as StaticLookup>::Source,
unbonding_points: BalanceOf<T>
) -> DispatchResult
pub fn unbond( origin: OriginFor<T>, member_account: <<T as Config>::Lookup as StaticLookup>::Source, unbonding_points: BalanceOf<T> ) -> DispatchResult
Unbond up to unbonding_points
of the member_account
’s funds from the pool. It
implicitly collects the rewards one last time, since not doing so would mean some
rewards would be forfeited.
Under certain conditions, this call can be dispatched permissionlessly (i.e. by any account).
Conditions for a permissionless dispatch.
- The pool is blocked and the caller is either the root or state-toggler. This is refereed to as a kick.
- The pool is destroying and the member is not the depositor.
- The pool is destroying, the member is the depositor and no other members are in the pool.
Conditions for permissioned dispatch (i.e. the caller is also the
member_account
):
- The caller is not the depositor.
- The caller is the depositor, the pool is destroying and no other members are in the pool.
Note
If there are too many unlocking chunks to unbond with the pool account,
Call::pool_withdraw_unbonded
can be called to try and minimize unlocking chunks.
The StakingInterface::unbond
will implicitly call Call::pool_withdraw_unbonded
to try to free chunks if necessary (ie. if unbound was called and no unlocking chunks
are available). However, it may not be possible to release the current unlocking chunks,
in which case, the result of this call will likely be the NoMoreChunks
error from the
staking system.
sourcepub fn pool_withdraw_unbonded(
origin: OriginFor<T>,
pool_id: PoolId,
num_slashing_spans: u32
) -> DispatchResult
pub fn pool_withdraw_unbonded( origin: OriginFor<T>, pool_id: PoolId, num_slashing_spans: u32 ) -> DispatchResult
Call withdraw_unbonded
for the pools account. This call can be made by any account.
This is useful if their are too many unlocking chunks to call unbond
, and some
can be cleared by withdrawing. In the case there are too many unlocking chunks, the user
would probably see an error like NoMoreChunks
emitted from the staking system when
they attempt to unbond.
sourcepub fn withdraw_unbonded(
origin: OriginFor<T>,
member_account: <<T as Config>::Lookup as StaticLookup>::Source,
num_slashing_spans: u32
) -> DispatchResultWithPostInfo
pub fn withdraw_unbonded( origin: OriginFor<T>, member_account: <<T as Config>::Lookup as StaticLookup>::Source, num_slashing_spans: u32 ) -> DispatchResultWithPostInfo
Withdraw unbonded funds from member_account
. If no bonded funds can be unbonded, an
error is returned.
Under certain conditions, this call can be dispatched permissionlessly (i.e. by any account).
Conditions for a permissionless dispatch
- The pool is in destroy mode and the target is not the depositor.
- The target is the depositor and they are the only member in the sub pools.
- The pool is blocked and the caller is either the root or state-toggler.
Conditions for permissioned dispatch
- The caller is the target and they are not the depositor.
Note
If the target is the depositor, the pool will be destroyed.
sourcepub fn create(
origin: OriginFor<T>,
amount: BalanceOf<T>,
root: <<T as Config>::Lookup as StaticLookup>::Source,
nominator: <<T as Config>::Lookup as StaticLookup>::Source,
state_toggler: <<T as Config>::Lookup as StaticLookup>::Source
) -> DispatchResult
pub fn create( origin: OriginFor<T>, amount: BalanceOf<T>, root: <<T as Config>::Lookup as StaticLookup>::Source, nominator: <<T as Config>::Lookup as StaticLookup>::Source, state_toggler: <<T as Config>::Lookup as StaticLookup>::Source ) -> DispatchResult
Create a new delegation pool.
Arguments
amount
- The amount of funds to delegate to the pool. This also acts of a sort of deposit since the pools creator cannot fully unbond funds until the pool is being destroyed.index
- A disambiguation index for creating the account. Likely only useful when creating multiple pools in the same extrinsic.root
- The account to set asPoolRoles::root
.nominator
- The account to set as thePoolRoles::nominator
.state_toggler
- The account to set as thePoolRoles::state_toggler
.
Note
In addition to amount
, the caller will transfer the existential deposit; so the caller
needs at have at least amount + existential_deposit
transferrable.
sourcepub fn create_with_pool_id(
origin: OriginFor<T>,
amount: BalanceOf<T>,
root: <<T as Config>::Lookup as StaticLookup>::Source,
nominator: <<T as Config>::Lookup as StaticLookup>::Source,
state_toggler: <<T as Config>::Lookup as StaticLookup>::Source,
pool_id: PoolId
) -> DispatchResult
pub fn create_with_pool_id( origin: OriginFor<T>, amount: BalanceOf<T>, root: <<T as Config>::Lookup as StaticLookup>::Source, nominator: <<T as Config>::Lookup as StaticLookup>::Source, state_toggler: <<T as Config>::Lookup as StaticLookup>::Source, pool_id: PoolId ) -> DispatchResult
Create a new delegation pool with a previously used pool id
Arguments
same as create
with the inclusion of
pool_id
- `A valid PoolId.
sourcepub fn nominate(
origin: OriginFor<T>,
pool_id: PoolId,
validators: Vec<T::AccountId>
) -> DispatchResult
pub fn nominate( origin: OriginFor<T>, pool_id: PoolId, validators: Vec<T::AccountId> ) -> DispatchResult
Nominate on behalf of the pool.
The dispatch origin of this call must be signed by the pool nominator or the pool root role.
This directly forward the call to the staking pallet, on behalf of the pool bonded account.
sourcepub fn set_state(
origin: OriginFor<T>,
pool_id: PoolId,
state: PoolState
) -> DispatchResult
pub fn set_state( origin: OriginFor<T>, pool_id: PoolId, state: PoolState ) -> DispatchResult
Set a new state for the pool.
If a pool is already in the Destroying
state, then under no condition can its state
change again.
The dispatch origin of this call must be either:
- signed by the state toggler, or the root role of the pool,
- if the pool conditions to be open are NOT met (as described by
ok_to_be_open
), and then the state of the pool can be permissionlessly changed toDestroying
.
sourcepub fn set_metadata(
origin: OriginFor<T>,
pool_id: PoolId,
metadata: Vec<u8>
) -> DispatchResult
pub fn set_metadata( origin: OriginFor<T>, pool_id: PoolId, metadata: Vec<u8> ) -> DispatchResult
Set a new metadata for the pool.
The dispatch origin of this call must be signed by the state toggler, or the root role of the pool.
sourcepub fn set_configs(
origin: OriginFor<T>,
min_join_bond: ConfigOp<BalanceOf<T>>,
min_create_bond: ConfigOp<BalanceOf<T>>,
max_pools: ConfigOp<u32>,
max_members: ConfigOp<u32>,
max_members_per_pool: ConfigOp<u32>
) -> DispatchResult
pub fn set_configs( origin: OriginFor<T>, min_join_bond: ConfigOp<BalanceOf<T>>, min_create_bond: ConfigOp<BalanceOf<T>>, max_pools: ConfigOp<u32>, max_members: ConfigOp<u32>, max_members_per_pool: ConfigOp<u32> ) -> DispatchResult
Update configurations for the nomination pools. The origin for this call must be Root.
Arguments
min_join_bond
- SetMinJoinBond
.min_create_bond
- SetMinCreateBond
.max_pools
- SetMaxPools
.max_members
- SetMaxPoolMembers
.max_members_per_pool
- SetMaxPoolMembersPerPool
.
sourcepub fn update_roles(
origin: OriginFor<T>,
pool_id: PoolId,
new_root: ConfigOp<T::AccountId>,
new_nominator: ConfigOp<T::AccountId>,
new_state_toggler: ConfigOp<T::AccountId>
) -> DispatchResult
pub fn update_roles( origin: OriginFor<T>, pool_id: PoolId, new_root: ConfigOp<T::AccountId>, new_nominator: ConfigOp<T::AccountId>, new_state_toggler: ConfigOp<T::AccountId> ) -> DispatchResult
Update the roles of the pool.
The root is the only entity that can change any of the roles, including itself, excluding the depositor, who can never change.
It emits an event, notifying UIs of the role change. This event is quite relevant to most pool members and they should be informed of changes to pool roles.
sourcepub fn chill(origin: OriginFor<T>, pool_id: PoolId) -> DispatchResult
pub fn chill(origin: OriginFor<T>, pool_id: PoolId) -> DispatchResult
Chill on behalf of the pool.
The dispatch origin of this call must be signed by the pool nominator or the pool
root role, same as Pallet::nominate
.
This directly forward the call to the staking pallet, on behalf of the pool bonded account.
source§impl<T: Config> Pallet<T>
impl<T: Config> Pallet<T>
sourcepub fn pending_rewards(member_account: T::AccountId) -> Option<BalanceOf<T>>
pub fn pending_rewards(member_account: T::AccountId) -> Option<BalanceOf<T>>
Returns the pending rewards for the specified member_account
.
In the case of error, None
is returned.
sourcepub fn depositor_min_bond() -> BalanceOf<T>
pub fn depositor_min_bond() -> BalanceOf<T>
The amount of bond that MUST REMAIN IN BONDED in ALL POOLS.
It is the responsibility of the depositor to put these funds into the pool initially. Upon unbond, they can never unbond to a value below this amount.
It is essentially max { MinNominatorBond, MinCreateBond, MinJoinBond }
, where the former
is coming from the staking pallet and the latter two are configured in this pallet.
sourcepub fn dissolve_pool(bonded_pool: BondedPool<T>)
pub fn dissolve_pool(bonded_pool: BondedPool<T>)
Remove everything related to the given bonded pool.
Metadata and all of the sub-pools are also deleted. All accounts are dusted and the leftover of the reward account is returned to the depositor.
sourcepub fn create_bonded_account(id: PoolId) -> T::AccountId
pub fn create_bonded_account(id: PoolId) -> T::AccountId
Create the main, bonded account of a pool with the given id.
sourcepub fn create_reward_account(id: PoolId) -> T::AccountId
pub fn create_reward_account(id: PoolId) -> T::AccountId
Create the reward account of a pool with the given id.
sourcepub fn do_try_state(level: u8) -> Result<(), &'static str>
pub fn do_try_state(level: u8) -> Result<(), &'static str>
Ensure the correctness of the state of this pallet.
This should be valid before or after each state transition of this pallet.
Invariants:
First, let’s consider pools:
BondedPools
andRewardPools
must all have the EXACT SAME key-set.SubPoolsStorage
must be a subset of the above superset.Metadata
keys must be a subset of the above superset.- the count of the above set must be less than
MaxPools
.
Then, considering members as well:
- each
BondedPool.member_counter
must be:- correct (compared to actual count of member who have
.pool_id
this pool) - less than
MaxPoolMembersPerPool
.
- correct (compared to actual count of member who have
- each
member.pool_id
must correspond to an existingBondedPool.id
(which implies the existence of the reward pool as well). - count of all members must be less than
MaxPoolMembers
.
Then, considering unbonding members:
for each pool:
- sum of the balance that’s tracked in all unbonding pools must be the same as the unbonded balance of the main account, as reported by the staking interface.
- sum of the balance that’s tracked in all unbonding pools, plus the bonded balance of the main account should be less than or qual to the total balance of the main account.
Sanity check level
To cater for tests that want to escape parts of these checks, this function is split into
multiple level
s, where the higher the level, the more checks we performs. So,
try_state(255)
is the strongest sanity check, and 0
performs no checks.
Trait Implementations§
source§impl<T: Config> GetStorageVersion for Pallet<T>
impl<T: Config> GetStorageVersion for Pallet<T>
source§fn current_storage_version() -> StorageVersion
fn current_storage_version() -> StorageVersion
source§fn on_chain_storage_version() -> StorageVersion
fn on_chain_storage_version() -> StorageVersion
source§impl<T: Config> Hooks<<T as Config>::BlockNumber> for Pallet<T>
impl<T: Config> Hooks<<T as Config>::BlockNumber> for Pallet<T>
source§fn integrity_test()
fn integrity_test()
source§fn on_finalize(_n: BlockNumber)
fn on_finalize(_n: BlockNumber)
source§fn on_idle(_n: BlockNumber, _remaining_weight: Weight) -> Weight
fn on_idle(_n: BlockNumber, _remaining_weight: Weight) -> Weight
on_finalize
).
Implement to have something happen using the remaining weight.
Will not fire if the remaining weight is 0.
Return the weight used, the hook will subtract it from current weight used
and pass the result to the next on_idle
hook if it exists.source§fn on_initialize(_n: BlockNumber) -> Weight
fn on_initialize(_n: BlockNumber) -> Weight
source§fn on_runtime_upgrade() -> Weight
fn on_runtime_upgrade() -> Weight
source§fn offchain_worker(_n: BlockNumber)
fn offchain_worker(_n: BlockNumber)
source§impl<T: Config> IntegrityTest for Pallet<T>
impl<T: Config> IntegrityTest for Pallet<T>
source§fn integrity_test()
fn integrity_test()
source§impl<T: Config> OffchainWorker<<T as Config>::BlockNumber> for Pallet<T>
impl<T: Config> OffchainWorker<<T as Config>::BlockNumber> for Pallet<T>
source§fn offchain_worker(n: <T as Config>::BlockNumber)
fn offchain_worker(n: <T as Config>::BlockNumber)
source§impl<T: Config> OnFinalize<<T as Config>::BlockNumber> for Pallet<T>
impl<T: Config> OnFinalize<<T as Config>::BlockNumber> for Pallet<T>
source§fn on_finalize(n: <T as Config>::BlockNumber)
fn on_finalize(n: <T as Config>::BlockNumber)
source§impl<T: Config> OnGenesis for Pallet<T>
impl<T: Config> OnGenesis for Pallet<T>
source§fn on_genesis()
fn on_genesis()
source§impl<T: Config> OnIdle<<T as Config>::BlockNumber> for Pallet<T>
impl<T: Config> OnIdle<<T as Config>::BlockNumber> for Pallet<T>
source§fn on_idle(n: <T as Config>::BlockNumber, remaining_weight: Weight) -> Weight
fn on_idle(n: <T as Config>::BlockNumber, remaining_weight: Weight) -> Weight
remaining_weight
to make sure it is high enough to allow for
your pallet’s extra computation. Read moresource§impl<T: Config> OnInitialize<<T as Config>::BlockNumber> for Pallet<T>
impl<T: Config> OnInitialize<<T as Config>::BlockNumber> for Pallet<T>
source§fn on_initialize(n: <T as Config>::BlockNumber) -> Weight
fn on_initialize(n: <T as Config>::BlockNumber) -> Weight
source§impl<T: Config> OnRuntimeUpgrade for Pallet<T>
impl<T: Config> OnRuntimeUpgrade for Pallet<T>
source§fn on_runtime_upgrade() -> Weight
fn on_runtime_upgrade() -> Weight
source§impl<T: Config> OnStakerSlash<<T as Config>::AccountId, <<T as Config>::Currency as Currency<<T as Config>::AccountId>>::Balance> for Pallet<T>
impl<T: Config> OnStakerSlash<<T as Config>::AccountId, <<T as Config>::Currency as Currency<<T as Config>::AccountId>>::Balance> for Pallet<T>
source§impl<T: Config> PalletInfoAccess for Pallet<T>
impl<T: Config> PalletInfoAccess for Pallet<T>
source§fn module_name() -> &'static str
fn module_name() -> &'static str
source§fn crate_version() -> CrateVersion
fn crate_version() -> CrateVersion
source§impl<T: Config> PalletsInfoAccess for Pallet<T>
impl<T: Config> PalletsInfoAccess for Pallet<T>
source§impl<T> PartialEq<Pallet<T>> for Pallet<T>
impl<T> PartialEq<Pallet<T>> for Pallet<T>
source§impl<T: Config> StorageInfoTrait for Pallet<T>
impl<T: Config> StorageInfoTrait for Pallet<T>
fn storage_info() -> Vec<StorageInfo>
source§impl<T: Config> WhitelistedStorageKeys for Pallet<T>
impl<T: Config> WhitelistedStorageKeys for Pallet<T>
source§fn whitelisted_storage_keys() -> Vec<TrackedStorageKey>
fn whitelisted_storage_keys() -> Vec<TrackedStorageKey>
Vec<TrackedStorageKey>
indicating the storage keys that
should be whitelisted during benchmarking. This means that those keys
will be excluded from the benchmarking performance calculation.impl<T> Eq for Pallet<T>
Auto Trait Implementations§
impl<T> RefUnwindSafe for Pallet<T>where T: RefUnwindSafe,
impl<T> Send for Pallet<T>where T: Send,
impl<T> Sync for Pallet<T>where T: Sync,
impl<T> Unpin for Pallet<T>where T: Unpin,
impl<T> UnwindSafe for Pallet<T>where T: UnwindSafe,
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
source§impl<T> CheckedConversion for T
impl<T> CheckedConversion for T
source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere T: Any,
source§fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>
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
.source§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
.source§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.source§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.source§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.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, Outer> IsWrappedBy<Outer> for Twhere
Outer: AsRef<T> + AsMut<T> + From<T>,
T: From<Outer>,
impl<T, Outer> IsWrappedBy<Outer> for Twhere Outer: AsRef<T> + AsMut<T> + From<T>, T: From<Outer>,
source§impl<T> PalletVersionToStorageVersionHelper for Twhere
T: GetStorageVersion + PalletInfoAccess,
impl<T> PalletVersionToStorageVersionHelper for Twhere T: GetStorageVersion + PalletInfoAccess,
fn migrate(db_weight: &RuntimeDbWeight) -> Weight
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) -> 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,
source§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,
source§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.source§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> Pointable for T
impl<T> Pointable for T
source§impl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
source§fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Selfwhere Self: UniqueSaturatedFrom<T>,
source§fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> Twhere Self: UniqueSaturatedInto<T>,
T
. Read moresource§impl<T> Tap for T
impl<T> Tap for T
source§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 moresource§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 moresource§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 moresource§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 moresource§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 moresource§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 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)) -> 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.source§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.source§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.source§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<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
impl<S, T> UncheckedInto<T> for Swhere T: UncheckedFrom<S>,
source§fn unchecked_into(self) -> T
fn unchecked_into(self) -> T
unchecked_from
.source§impl<T, S> UniqueSaturatedInto<T> for Swhere
T: Bounded,
S: TryInto<T>,
impl<T, S> UniqueSaturatedInto<T> for Swhere T: Bounded, S: TryInto<T>,
source§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
T
.