Struct pallet_dapp_staking::AccountLedger
source · pub struct AccountLedger<UnlockingLen: Get<u32>> { /* private fields */ }
Expand description
General info about an account’s lock & stakes.
§Overview
The most complex part about this type are the staked
and staked_future
fields.
To understand why the two fields exist and how they are used, it’s important to consider some facts:
- when an account stakes, the staked amount is only eligible for rewards from the next era
- all stakes are reset when a period ends - but this is done in a lazy fashion, account ledgers aren’t directly updated
stake
andunstake
operations are allowed only if the account has claimed all pending rewards
In order to keep track of current era stake, and next era stake, two fields are needed.
Since it’s not allowed to stake/unstake if there are pending rewards, it’s guaranteed that the staked
and staked_future
eras are always consecutive.
In order to understand if stake is still valid, it’s enough to check the period
field of either staked
or staked_future
.
§Example
§Scenario 1
- current era is 20, and current period is 1
staked
is equal to:{ voting: 100, build_and_earn: 50, era: 5, period: 1 }
staked_future
is equal to:{ voting: 100, build_and_earn: 100, era: 6, period: 1 }
The correct way to interpret this is:
- account had staked 150 in total in era 5
- account had increased their stake to 200 in total in era 6
- since then, era 6, account hadn’t staked or unstaked anything or hasn’t claimed any rewards
- since we’re in era 20 and period is still 1, the account’s stake for eras 7 to 20 is still 200
§Scenario 2
- current era is 20, and current period is 1
staked
is equal to:{ voting: 0, build_and_earn: 0, era: 0, period: 0 }
staked_future
is equal to:{ voting: 0, build_and_earn: 350, era: 13, period: 1 }
The correct way to interpret this is:
staked
entry is empty- account had called
stake
during era 12, and staked 350 for the next era - account hadn’t staked, unstaked or claimed rewards since then
- since we’re in era 20 and period is still 1, the account’s stake for eras 13 to 20 is still 350
§Scenario 3
- current era is 30, and current period is 2
- period 1 ended after era 24, and period 2 started in era 25
staked
is equal to:{ voting: 100, build_and_earn: 300, era: 20, period: 1 }
staked_future
is equal toNone
The correct way to interpret this is:
- in era 20, account had claimed rewards for the past eras, so only the
staked
entry remained - since then, account hadn’t staked, unstaked or claimed rewards
- period 1 ended in era 24, which means that after that era, the
staked
entry is no longer valid - account had staked 400 in total from era 20 up to era 24 (inclusive)
- account’s stake in era 25 is zero
Implementations§
source§impl<UnlockingLen> AccountLedger<UnlockingLen>where
UnlockingLen: Get<u32>,
impl<UnlockingLen> AccountLedger<UnlockingLen>where
UnlockingLen: Get<u32>,
sourcepub fn locked(&self) -> Balance
pub fn locked(&self) -> Balance
How much active locked amount an account has. This can be used for staking.
sourcepub fn unlocking_chunks(&self) -> &[UnlockingChunk]
pub fn unlocking_chunks(&self) -> &[UnlockingChunk]
Unlocking chunks.
sourcepub fn active_locked_amount(&self) -> Balance
pub fn active_locked_amount(&self) -> Balance
Returns active locked amount.
If zero
, means that associated account hasn’t got any active locked funds.
It is possible that some funds are undergoing the unlocking period, but they aren’t considered active in that case.
sourcepub fn unlocking_amount(&self) -> Balance
pub fn unlocking_amount(&self) -> Balance
Returns unlocking amount.
If zero
, means that associated account hasn’t got any unlocking chunks.
sourcepub fn total_locked_amount(&self) -> Balance
pub fn total_locked_amount(&self) -> Balance
Total locked amount by the user. Includes both active locked amount & unlocking amount.
sourcepub fn add_lock_amount(&mut self, amount: Balance)
pub fn add_lock_amount(&mut self, amount: Balance)
Adds the specified amount to the total locked amount.
sourcepub fn subtract_lock_amount(&mut self, amount: Balance)
pub fn subtract_lock_amount(&mut self, amount: Balance)
Subtracts the specified amount of the total locked amount.
sourcepub fn add_unlocking_chunk(
&mut self,
amount: Balance,
unlock_block: BlockNumber
) -> Result<(), AccountLedgerError>
pub fn add_unlocking_chunk( &mut self, amount: Balance, unlock_block: BlockNumber ) -> Result<(), AccountLedgerError>
Adds the specified amount to the unlocking chunks.
If entry for the specified block already exists, it’s updated.
If entry for the specified block doesn’t exist, it’s created and insertion is attempted. In case vector has no more capacity, error is returned, and whole operation is a noop.
sourcepub fn unlockable_amount(&self, current_period: PeriodNumber) -> Balance
pub fn unlockable_amount(&self, current_period: PeriodNumber) -> Balance
Amount available for unlocking.
sourcepub fn claim_unlocked(&mut self, current_block_number: BlockNumber) -> Balance
pub fn claim_unlocked(&mut self, current_block_number: BlockNumber) -> Balance
Claims all of the fully unlocked chunks, and returns the total claimable amount.
sourcepub fn consume_unlocking_chunks(&mut self) -> Balance
pub fn consume_unlocking_chunks(&mut self) -> Balance
Consumes all of the unlocking chunks, and returns the total amount being unlocked.
sourcepub fn stakeable_amount(&self, active_period: PeriodNumber) -> Balance
pub fn stakeable_amount(&self, active_period: PeriodNumber) -> Balance
Amount that is available for staking.
This is equal to the total active locked amount, minus the staked amount already active.
sourcepub fn staked_amount(&self, active_period: PeriodNumber) -> Balance
pub fn staked_amount(&self, active_period: PeriodNumber) -> Balance
Amount that is staked, in respect to the currently active period.
sourcepub fn staked_amount_for_type(
&self,
subperiod: Subperiod,
period: PeriodNumber
) -> Balance
pub fn staked_amount_for_type( &self, subperiod: Subperiod, period: PeriodNumber ) -> Balance
How much is staked for the specified subperiod, in respect to the specified era.
sourcepub fn add_stake_amount(
&mut self,
amount: Balance,
current_era: EraNumber,
current_period_info: PeriodInfo
) -> Result<(), AccountLedgerError>
pub fn add_stake_amount( &mut self, amount: Balance, current_era: EraNumber, current_period_info: PeriodInfo ) -> Result<(), AccountLedgerError>
Adds the specified amount to total staked amount, if possible.
Staking can only be done for the ongoing period, and era.
- The
period
requirement enforces staking in the ongoing period. - The
era
requirement enforces staking in the ongoing era.
The 2nd condition is needed to prevent stakers from building a significant history of stakes, without claiming the rewards. So if a historic era exists as an entry, stakers will first need to claim the pending rewards, before they can stake again.
Additionally, the staked amount must not exceed what’s available for staking.
sourcepub fn unstake_amount(
&mut self,
amount: Balance,
current_era: EraNumber,
current_period_info: PeriodInfo
) -> Result<(), AccountLedgerError>
pub fn unstake_amount( &mut self, amount: Balance, current_era: EraNumber, current_period_info: PeriodInfo ) -> Result<(), AccountLedgerError>
Subtracts the specified amount from the total staked amount, if possible.
Unstake can only be called if the entry for the current era exists. In case historic entry exists, rewards first need to be claimed, before unstaking is possible. Similar as with stake functionality, this is to prevent staker from building a significant history of stakes.
sourcepub fn staked_period(&self) -> Option<PeriodNumber>
pub fn staked_period(&self) -> Option<PeriodNumber>
Period for which account has staking information or None
if no staking information exists.
sourcepub fn earliest_staked_era(&self) -> Option<EraNumber>
pub fn earliest_staked_era(&self) -> Option<EraNumber>
Earliest era for which the account has staking information or None
if no staking information exists.
sourcepub fn maybe_cleanup_expired(
&mut self,
valid_threshold_period: PeriodNumber
) -> bool
pub fn maybe_cleanup_expired( &mut self, valid_threshold_period: PeriodNumber ) -> bool
Cleanup staking information if it has expired.
§Args
valid_threshold_period
- last period for which entries can still be considered valid.
true
if any change was made, false
otherwise.
sourcepub fn claim_up_to_era(
&mut self,
era: EraNumber,
period_end: Option<EraNumber>
) -> Result<EraStakePairIter, AccountLedgerError>
pub fn claim_up_to_era( &mut self, era: EraNumber, period_end: Option<EraNumber> ) -> Result<EraStakePairIter, AccountLedgerError>
‘Claim’ rewards up to the specified era.
Returns an iterator over the (era, amount)
pairs, where amount
describes the staked amount eligible for reward in the appropriate era.
If period_end
is provided, it’s used to determine whether all applicable chunks have been claimed.
Trait Implementations§
source§impl<UnlockingLen: Get<u32>> Clone for AccountLedger<UnlockingLen>
impl<UnlockingLen: Get<u32>> Clone for AccountLedger<UnlockingLen>
source§impl<UnlockingLen: Get<u32>> Debug for AccountLedger<UnlockingLen>
impl<UnlockingLen: Get<u32>> Debug for AccountLedger<UnlockingLen>
source§impl<UnlockingLen: Get<u32>> Decode for AccountLedger<UnlockingLen>where
BoundedVec<UnlockingChunk, UnlockingLen>: Decode,
impl<UnlockingLen: Get<u32>> Decode for AccountLedger<UnlockingLen>where
BoundedVec<UnlockingChunk, UnlockingLen>: Decode,
source§fn decode<__CodecInputEdqy: Input>(
__codec_input_edqy: &mut __CodecInputEdqy
) -> Result<Self, Error>
fn decode<__CodecInputEdqy: Input>( __codec_input_edqy: &mut __CodecInputEdqy ) -> Result<Self, Error>
§fn decode_into<I>(
input: &mut I,
dst: &mut MaybeUninit<Self>
) -> Result<DecodeFinished, Error>where
I: Input,
fn decode_into<I>(
input: &mut I,
dst: &mut MaybeUninit<Self>
) -> Result<DecodeFinished, Error>where
I: Input,
§fn skip<I>(input: &mut I) -> Result<(), Error>where
I: Input,
fn skip<I>(input: &mut I) -> Result<(), Error>where
I: Input,
§fn encoded_fixed_size() -> Option<usize>
fn encoded_fixed_size() -> Option<usize>
source§impl<UnlockingLen: Get<u32>> Default for AccountLedger<UnlockingLen>
impl<UnlockingLen: Get<u32>> Default for AccountLedger<UnlockingLen>
source§impl<UnlockingLen: Get<u32>> Encode for AccountLedger<UnlockingLen>where
BoundedVec<UnlockingChunk, UnlockingLen>: Encode,
impl<UnlockingLen: Get<u32>> Encode for AccountLedger<UnlockingLen>where
BoundedVec<UnlockingChunk, UnlockingLen>: Encode,
source§fn size_hint(&self) -> usize
fn size_hint(&self) -> usize
source§fn encode_to<__CodecOutputEdqy: Output + ?Sized>(
&self,
__codec_dest_edqy: &mut __CodecOutputEdqy
)
fn encode_to<__CodecOutputEdqy: Output + ?Sized>( &self, __codec_dest_edqy: &mut __CodecOutputEdqy )
§fn using_encoded<R, F>(&self, f: F) -> R
fn using_encoded<R, F>(&self, f: F) -> R
§fn encoded_size(&self) -> usize
fn encoded_size(&self) -> usize
source§impl<UnlockingLen: Get<u32>> MaxEncodedLen for AccountLedger<UnlockingLen>where
BoundedVec<UnlockingChunk, UnlockingLen>: MaxEncodedLen,
impl<UnlockingLen: Get<u32>> MaxEncodedLen for AccountLedger<UnlockingLen>where
BoundedVec<UnlockingChunk, UnlockingLen>: MaxEncodedLen,
source§fn max_encoded_len() -> usize
fn max_encoded_len() -> usize
source§impl<UnlockingLen: Get<u32>> PartialEq for AccountLedger<UnlockingLen>
impl<UnlockingLen: Get<u32>> PartialEq for AccountLedger<UnlockingLen>
source§impl<UnlockingLen> TypeInfo for AccountLedger<UnlockingLen>where
BoundedVec<UnlockingChunk, UnlockingLen>: TypeInfo + 'static,
UnlockingLen: Get<u32> + 'static,
impl<UnlockingLen> TypeInfo for AccountLedger<UnlockingLen>where
BoundedVec<UnlockingChunk, UnlockingLen>: TypeInfo + 'static,
UnlockingLen: Get<u32> + 'static,
impl<UnlockingLen: Get<u32>> EncodeLike for AccountLedger<UnlockingLen>where
BoundedVec<UnlockingChunk, UnlockingLen>: Encode,
impl<UnlockingLen: Get<u32>> Eq for AccountLedger<UnlockingLen>
Auto Trait Implementations§
impl<UnlockingLen> RefUnwindSafe for AccountLedger<UnlockingLen>where
UnlockingLen: RefUnwindSafe,
impl<UnlockingLen> Send for AccountLedger<UnlockingLen>where
UnlockingLen: Send,
impl<UnlockingLen> Sync for AccountLedger<UnlockingLen>where
UnlockingLen: Sync,
impl<UnlockingLen> Unpin for AccountLedger<UnlockingLen>where
UnlockingLen: Unpin,
impl<UnlockingLen> UnwindSafe for AccountLedger<UnlockingLen>where
UnlockingLen: 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
§impl<T> CheckedConversion for T
impl<T> CheckedConversion for T
§fn checked_from<T>(t: T) -> Option<Self>where
Self: TryFrom<T>,
fn checked_from<T>(t: T) -> Option<Self>where
Self: TryFrom<T>,
§fn checked_into<T>(self) -> Option<T>where
Self: TryInto<T>,
fn checked_into<T>(self) -> Option<T>where
Self: TryInto<T>,
§impl<T> Clear for T
impl<T> Clear for T
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> DecodeAll for Twhere
T: Decode,
impl<T> DecodeAll for Twhere
T: Decode,
§fn decode_all(input: &mut &[u8]) -> Result<T, Error>
fn decode_all(input: &mut &[u8]) -> Result<T, Error>
Self
and consume all of the given input data. Read more§impl<T> DecodeLimit for Twhere
T: Decode,
impl<T> DecodeLimit for Twhere
T: Decode,
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§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> Hashable for Twhere
T: Codec,
impl<T> Hashable for Twhere
T: Codec,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more§impl<T> IsType<T> for T
impl<T> IsType<T> for T
§impl<T, Outer> IsWrappedBy<Outer> for T
impl<T, Outer> IsWrappedBy<Outer> for T
§impl<T> KeyedVec for Twhere
T: Codec,
impl<T> KeyedVec for Twhere
T: Codec,
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
§fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
§fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
T
. Read more§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.§impl<T> TryConv for T
impl<T> TryConv for T
§impl<T, U> TryInto2<U> for Twhere
U: TryFrom2<T>,
impl<T, U> TryInto2<U> for Twhere
U: TryFrom2<T>,
§impl<T, U> TryIntoKey<U> for Twhere
U: TryFromKey<T>,
impl<T, U> TryIntoKey<U> for Twhere
U: TryFromKey<T>,
type Error = <U as TryFromKey<T>>::Error
fn try_into_key(self) -> Result<U, <U as TryFromKey<T>>::Error>
§impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
§fn unchecked_into(self) -> T
fn unchecked_into(self) -> T
unchecked_from
.§impl<T, S> UniqueSaturatedInto<T> for S
impl<T, S> UniqueSaturatedInto<T> for S
§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
T
.