pub struct ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
Provider: ProductProvider<Asset, Rational, Time, Addon>,
T: Config<I>,
I: 'static,
Addon: DiscriminantTag,
Rational: DiscriminantTag,
Time: DiscriminantTag,
Asset: DiscriminantTag,{
asset: SumDynType<AssetOf<T, I>, <Provider as VirtualDynBound<Asset>>::Bound>,
bias: SumDynType<T::Bias, <Provider as VirtualDynBound<Rational>>::Bound>,
time: SumDynType<T::Time, <Provider as VirtualDynBound<Time>>::Bound>,
addon: <Provider as VirtualDynExtensionSchema<Addon>>::Repr,
}Expand description
A generic virtual product structure used
by LazyBalance components.
Core backing type for:
Each field is stored as a SumDynType and accessed via
VirtualDynField or VirtualDynExtension.
Enables a schema-less, context-driven layout, where:
- field multiplicity is dynamic (
None | Some | Many) - bounds are enforced via
VirtualDynBound - extensions are defined via
VirtualDynExtensionSchema
This allows reuse across multiple virtual types without redefining structs.
ProductProviderimplemented byBalanceModelContextsupplies bounds and extension schema- generics (
Asset,Rational,Time) resolve discriminant fields of the respective lazy balance virtual structs. - access is mediated through generic-traits, not direct struct usage
Fields§
§asset: SumDynType<AssetOf<T, I>, <Provider as VirtualDynBound<Asset>>::Bound>Asset-related fields resolved via VirtualDynField.
Uses SumDynType with capacity bounded by VirtualDynBound for Asset.
bias: SumDynType<T::Bias, <Provider as VirtualDynBound<Rational>>::Bound>Rational fields (e.g. bias / price factors) resolved via VirtualDynField.
Backed by SumDynType and bounded by VirtualDynBound for Rational.
time: SumDynType<T::Time, <Provider as VirtualDynBound<Time>>::Bound>Time-related fields (e.g. checkpoints) resolved via VirtualDynField.
Encoded as SumDynType with bounds provided by VirtualDynBound for Time.
addon: <Provider as VirtualDynExtensionSchema<Addon>>::ReprExtension storage defined by VirtualDynExtensionSchema.
Layout and semantics are fully provided by ProductProvider via
the associated extension schema (Addon).
Trait Implementations§
Source§impl<T, I, Provider, Asset, Rational, Time, Addon> Clone for ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
Provider: ProductProvider<Asset, Rational, Time, Addon>,
T: Config<I>,
I: 'static,
Addon: DiscriminantTag,
Rational: DiscriminantTag,
Time: DiscriminantTag,
Asset: DiscriminantTag,
impl<T, I, Provider, Asset, Rational, Time, Addon> Clone for ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
Provider: ProductProvider<Asset, Rational, Time, Addon>,
T: Config<I>,
I: 'static,
Addon: DiscriminantTag,
Rational: DiscriminantTag,
Time: DiscriminantTag,
Asset: DiscriminantTag,
Source§impl<T, I, Provider, Asset, Rational, Time, Addon> Debug for ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
Provider: ProductProvider<Asset, Rational, Time, Addon>,
T: Config<I>,
I: 'static,
Addon: DiscriminantTag,
Rational: DiscriminantTag,
Time: DiscriminantTag,
Asset: DiscriminantTag,
impl<T, I, Provider, Asset, Rational, Time, Addon> Debug for ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
Provider: ProductProvider<Asset, Rational, Time, Addon>,
T: Config<I>,
I: 'static,
Addon: DiscriminantTag,
Rational: DiscriminantTag,
Time: DiscriminantTag,
Asset: DiscriminantTag,
Source§impl<T, I, Provider, Asset, Rational, Time, Addon> Decode for ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
Provider: ProductProvider<Asset, Rational, Time, Addon>,
T: Config<I>,
I: 'static,
Addon: DiscriminantTag,
Rational: DiscriminantTag,
Time: DiscriminantTag,
Asset: DiscriminantTag,
<Provider as VirtualDynExtensionSchema<Addon>>::Repr: Delimited + Default,
impl<T, I, Provider, Asset, Rational, Time, Addon> Decode for ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
Provider: ProductProvider<Asset, Rational, Time, Addon>,
T: Config<I>,
I: 'static,
Addon: DiscriminantTag,
Rational: DiscriminantTag,
Time: DiscriminantTag,
Asset: DiscriminantTag,
<Provider as VirtualDynExtensionSchema<Addon>>::Repr: Delimited + Default,
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<T, I, Provider, Asset, Rational, Time, Addon> Default for ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
Provider: ProductProvider<Asset, Rational, Time, Addon>,
T: Config<I>,
I: 'static,
Addon: DiscriminantTag,
Rational: DiscriminantTag,
Time: DiscriminantTag,
Asset: DiscriminantTag,
impl<T, I, Provider, Asset, Rational, Time, Addon> Default for ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
Provider: ProductProvider<Asset, Rational, Time, Addon>,
T: Config<I>,
I: 'static,
Addon: DiscriminantTag,
Rational: DiscriminantTag,
Time: DiscriminantTag,
Asset: DiscriminantTag,
Source§impl<T, I, Provider, Asset, Rational, Time, Addon> Encode for ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
Provider: ProductProvider<Asset, Rational, Time, Addon>,
T: Config<I>,
I: 'static,
Addon: DiscriminantTag,
Rational: DiscriminantTag,
Time: DiscriminantTag,
Asset: DiscriminantTag,
<Provider as VirtualDynExtensionSchema<Addon>>::Repr: Delimited + Default,
impl<T, I, Provider, Asset, Rational, Time, Addon> Encode for ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
Provider: ProductProvider<Asset, Rational, Time, Addon>,
T: Config<I>,
I: 'static,
Addon: DiscriminantTag,
Rational: DiscriminantTag,
Time: DiscriminantTag,
Asset: DiscriminantTag,
<Provider as VirtualDynExtensionSchema<Addon>>::Repr: Delimited + Default,
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<T, I, Provider, Asset, Rational, Time, Addon> MaxEncodedLen for ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
Provider: ProductProvider<Asset, Rational, Time, Addon>,
T: Config<I>,
I: 'static,
Addon: DiscriminantTag,
Rational: DiscriminantTag,
Time: DiscriminantTag,
Asset: DiscriminantTag,
<Provider as VirtualDynExtensionSchema<Addon>>::Repr: MaxEncodedLen,
impl<T, I, Provider, Asset, Rational, Time, Addon> MaxEncodedLen for ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
Provider: ProductProvider<Asset, Rational, Time, Addon>,
T: Config<I>,
I: 'static,
Addon: DiscriminantTag,
Rational: DiscriminantTag,
Time: DiscriminantTag,
Asset: DiscriminantTag,
<Provider as VirtualDynExtensionSchema<Addon>>::Repr: MaxEncodedLen,
Source§fn max_encoded_len() -> usize
fn max_encoded_len() -> usize
Source§impl<T, I, Provider, Asset, Rational, Time, Addon> PartialEq for ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
Provider: ProductProvider<Asset, Rational, Time, Addon>,
T: Config<I>,
I: 'static,
Addon: DiscriminantTag,
Rational: DiscriminantTag,
Time: DiscriminantTag,
Asset: DiscriminantTag,
impl<T, I, Provider, Asset, Rational, Time, Addon> PartialEq for ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
Provider: ProductProvider<Asset, Rational, Time, Addon>,
T: Config<I>,
I: 'static,
Addon: DiscriminantTag,
Rational: DiscriminantTag,
Time: DiscriminantTag,
Asset: DiscriminantTag,
Source§impl<T, I, Provider, Asset, Rational, Time, Addon> TypeInfo for ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
Provider: ProductProvider<Asset, Rational, Time, Addon> + 'static,
T: Config<I> + 'static,
I: 'static,
Addon: DiscriminantTag + 'static,
Rational: DiscriminantTag + 'static,
Time: DiscriminantTag + 'static,
Asset: DiscriminantTag + 'static,
SumDynType<AssetOf<T, I>, <Provider as VirtualDynBound<Asset>>::Bound>: TypeInfo + 'static,
SumDynType<T::Bias, <Provider as VirtualDynBound<Rational>>::Bound>: TypeInfo + 'static,
SumDynType<T::Time, <Provider as VirtualDynBound<Time>>::Bound>: TypeInfo + 'static,
<Provider as VirtualDynExtensionSchema<Addon>>::Repr: TypeInfo + 'static,
impl<T, I, Provider, Asset, Rational, Time, Addon> TypeInfo for ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
Provider: ProductProvider<Asset, Rational, Time, Addon> + 'static,
T: Config<I> + 'static,
I: 'static,
Addon: DiscriminantTag + 'static,
Rational: DiscriminantTag + 'static,
Time: DiscriminantTag + 'static,
Asset: DiscriminantTag + 'static,
SumDynType<AssetOf<T, I>, <Provider as VirtualDynBound<Asset>>::Bound>: TypeInfo + 'static,
SumDynType<T::Bias, <Provider as VirtualDynBound<Rational>>::Bound>: TypeInfo + 'static,
SumDynType<T::Time, <Provider as VirtualDynBound<Time>>::Bound>: TypeInfo + 'static,
<Provider as VirtualDynExtensionSchema<Addon>>::Repr: TypeInfo + 'static,
Source§impl<T, I, Provider> VirtualDynExtension<BalanceAddon> for ProductType<T, I, Provider, BalanceAsset, BalanceRational, BalanceTime, BalanceAddon>where
Provider: ProductProvider<BalanceAsset, BalanceRational, BalanceTime, BalanceAddon>,
T: Config<I>,
I: 'static,
impl<T, I, Provider> VirtualDynExtension<BalanceAddon> for ProductType<T, I, Provider, BalanceAsset, BalanceRational, BalanceTime, BalanceAddon>where
Provider: ProductProvider<BalanceAsset, BalanceRational, BalanceTime, BalanceAddon>,
T: Config<I>,
I: 'static,
Source§fn access(&self) -> <Provider as VirtualDynExtensionSchema<BalanceAddon>>::Repr
fn access(&self) -> <Provider as VirtualDynExtensionSchema<BalanceAddon>>::Repr
Source§fn mutate(
&mut self,
v: <Provider as VirtualDynExtensionSchema<BalanceAddon>>::Repr,
)
fn mutate( &mut self, v: <Provider as VirtualDynExtensionSchema<BalanceAddon>>::Repr, )
Source§impl<T, I, Provider> VirtualDynExtension<ReceiptAddon> for ProductType<T, I, Provider, ReceiptAsset, ReceiptRational, ReceiptTime, ReceiptAddon>where
Provider: ProductProvider<ReceiptAsset, ReceiptRational, ReceiptTime, ReceiptAddon>,
T: Config<I>,
I: 'static,
impl<T, I, Provider> VirtualDynExtension<ReceiptAddon> for ProductType<T, I, Provider, ReceiptAsset, ReceiptRational, ReceiptTime, ReceiptAddon>where
Provider: ProductProvider<ReceiptAsset, ReceiptRational, ReceiptTime, ReceiptAddon>,
T: Config<I>,
I: 'static,
Source§fn access(&self) -> <Provider as VirtualDynExtensionSchema<ReceiptAddon>>::Repr
fn access(&self) -> <Provider as VirtualDynExtensionSchema<ReceiptAddon>>::Repr
Source§fn mutate(
&mut self,
v: <Provider as VirtualDynExtensionSchema<ReceiptAddon>>::Repr,
)
fn mutate( &mut self, v: <Provider as VirtualDynExtensionSchema<ReceiptAddon>>::Repr, )
Source§impl<T, I, Provider> VirtualDynExtension<SnapShotAddon> for ProductType<T, I, Provider, SnapShotAsset, SnapShotRational, SnapShotTime, SnapShotAddon>where
Provider: ProductProvider<SnapShotAsset, SnapShotRational, SnapShotTime, SnapShotAddon>,
T: Config<I>,
I: 'static,
impl<T, I, Provider> VirtualDynExtension<SnapShotAddon> for ProductType<T, I, Provider, SnapShotAsset, SnapShotRational, SnapShotTime, SnapShotAddon>where
Provider: ProductProvider<SnapShotAsset, SnapShotRational, SnapShotTime, SnapShotAddon>,
T: Config<I>,
I: 'static,
Source§fn access(&self) -> <Provider as VirtualDynExtensionSchema<SnapShotAddon>>::Repr
fn access(&self) -> <Provider as VirtualDynExtensionSchema<SnapShotAddon>>::Repr
Source§fn mutate(
&mut self,
v: <Provider as VirtualDynExtensionSchema<SnapShotAddon>>::Repr,
)
fn mutate( &mut self, v: <Provider as VirtualDynExtensionSchema<SnapShotAddon>>::Repr, )
Source§impl<T, I, Provider> VirtualDynField<BalanceAsset> for ProductType<T, I, Provider, BalanceAsset, BalanceRational, BalanceTime, BalanceAddon>where
Provider: ProductProvider<BalanceAsset, BalanceRational, BalanceTime, BalanceAddon>,
T: Config<I>,
I: 'static,
impl<T, I, Provider> VirtualDynField<BalanceAsset> for ProductType<T, I, Provider, BalanceAsset, BalanceRational, BalanceTime, BalanceAddon>where
Provider: ProductProvider<BalanceAsset, BalanceRational, BalanceTime, BalanceAddon>,
T: Config<I>,
I: 'static,
Source§type Some = <<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance
type Some = <<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance
Source§type Many = Vec<<<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance>
type Many = Vec<<<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance>
Some. Read moreSource§type Repr = SumDynType<<<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance, <Provider as VirtualDynBound<BalanceAsset>>::Bound>
type Repr = SumDynType<<<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance, <Provider as VirtualDynBound<BalanceAsset>>::Bound>
Source§impl<T, I, Provider> VirtualDynField<BalanceRational> for ProductType<T, I, Provider, BalanceAsset, BalanceRational, BalanceTime, BalanceAddon>where
Provider: ProductProvider<BalanceAsset, BalanceRational, BalanceTime, BalanceAddon>,
T: Config<I>,
I: 'static,
impl<T, I, Provider> VirtualDynField<BalanceRational> for ProductType<T, I, Provider, BalanceAsset, BalanceRational, BalanceTime, BalanceAddon>where
Provider: ProductProvider<BalanceAsset, BalanceRational, BalanceTime, BalanceAddon>,
T: Config<I>,
I: 'static,
Source§type Repr = SumDynType<<T as Config<I>>::Bias, <Provider as VirtualDynBound<BalanceRational>>::Bound>
type Repr = SumDynType<<T as Config<I>>::Bias, <Provider as VirtualDynBound<BalanceRational>>::Bound>
Source§impl<T, I, Provider> VirtualDynField<BalanceTime> for ProductType<T, I, Provider, BalanceAsset, BalanceRational, BalanceTime, BalanceAddon>where
Provider: ProductProvider<BalanceAsset, BalanceRational, BalanceTime, BalanceAddon>,
T: Config<I>,
I: 'static,
impl<T, I, Provider> VirtualDynField<BalanceTime> for ProductType<T, I, Provider, BalanceAsset, BalanceRational, BalanceTime, BalanceAddon>where
Provider: ProductProvider<BalanceAsset, BalanceRational, BalanceTime, BalanceAddon>,
T: Config<I>,
I: 'static,
Source§type Repr = SumDynType<<T as Config<I>>::Time, <Provider as VirtualDynBound<BalanceTime>>::Bound>
type Repr = SumDynType<<T as Config<I>>::Time, <Provider as VirtualDynBound<BalanceTime>>::Bound>
Source§impl<T, I, Provider> VirtualDynField<ReceiptAsset> for ProductType<T, I, Provider, ReceiptAsset, ReceiptRational, ReceiptTime, ReceiptAddon>where
Provider: ProductProvider<ReceiptAsset, ReceiptRational, ReceiptTime, ReceiptAddon>,
T: Config<I>,
I: 'static,
impl<T, I, Provider> VirtualDynField<ReceiptAsset> for ProductType<T, I, Provider, ReceiptAsset, ReceiptRational, ReceiptTime, ReceiptAddon>where
Provider: ProductProvider<ReceiptAsset, ReceiptRational, ReceiptTime, ReceiptAddon>,
T: Config<I>,
I: 'static,
Source§type Some = <<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance
type Some = <<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance
Source§type Many = Vec<<<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance>
type Many = Vec<<<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance>
Some. Read moreSource§type Repr = SumDynType<<<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance, <Provider as VirtualDynBound<ReceiptAsset>>::Bound>
type Repr = SumDynType<<<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance, <Provider as VirtualDynBound<ReceiptAsset>>::Bound>
Source§impl<T, I, Provider> VirtualDynField<ReceiptRational> for ProductType<T, I, Provider, ReceiptAsset, ReceiptRational, ReceiptTime, ReceiptAddon>where
Provider: ProductProvider<ReceiptAsset, ReceiptRational, ReceiptTime, ReceiptAddon>,
T: Config<I>,
I: 'static,
impl<T, I, Provider> VirtualDynField<ReceiptRational> for ProductType<T, I, Provider, ReceiptAsset, ReceiptRational, ReceiptTime, ReceiptAddon>where
Provider: ProductProvider<ReceiptAsset, ReceiptRational, ReceiptTime, ReceiptAddon>,
T: Config<I>,
I: 'static,
Source§type Repr = SumDynType<<T as Config<I>>::Bias, <Provider as VirtualDynBound<ReceiptRational>>::Bound>
type Repr = SumDynType<<T as Config<I>>::Bias, <Provider as VirtualDynBound<ReceiptRational>>::Bound>
Source§impl<T, I, Provider> VirtualDynField<ReceiptTime> for ProductType<T, I, Provider, ReceiptAsset, ReceiptRational, ReceiptTime, ReceiptAddon>where
Provider: ProductProvider<ReceiptAsset, ReceiptRational, ReceiptTime, ReceiptAddon>,
T: Config<I>,
I: 'static,
impl<T, I, Provider> VirtualDynField<ReceiptTime> for ProductType<T, I, Provider, ReceiptAsset, ReceiptRational, ReceiptTime, ReceiptAddon>where
Provider: ProductProvider<ReceiptAsset, ReceiptRational, ReceiptTime, ReceiptAddon>,
T: Config<I>,
I: 'static,
Source§type Repr = SumDynType<<T as Config<I>>::Time, <Provider as VirtualDynBound<ReceiptTime>>::Bound>
type Repr = SumDynType<<T as Config<I>>::Time, <Provider as VirtualDynBound<ReceiptTime>>::Bound>
Source§impl<T, I, Provider> VirtualDynField<SnapShotAsset> for ProductType<T, I, Provider, SnapShotAsset, SnapShotRational, SnapShotTime, SnapShotAddon>where
Provider: ProductProvider<SnapShotAsset, SnapShotRational, SnapShotTime, SnapShotAddon>,
T: Config<I>,
I: 'static,
impl<T, I, Provider> VirtualDynField<SnapShotAsset> for ProductType<T, I, Provider, SnapShotAsset, SnapShotRational, SnapShotTime, SnapShotAddon>where
Provider: ProductProvider<SnapShotAsset, SnapShotRational, SnapShotTime, SnapShotAddon>,
T: Config<I>,
I: 'static,
Source§type Some = <<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance
type Some = <<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance
Source§type Many = Vec<<<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance>
type Many = Vec<<<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance>
Some. Read moreSource§type Repr = SumDynType<<<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance, <Provider as VirtualDynBound<SnapShotAsset>>::Bound>
type Repr = SumDynType<<<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance, <Provider as VirtualDynBound<SnapShotAsset>>::Bound>
Source§impl<T, I, Provider> VirtualDynField<SnapShotRational> for ProductType<T, I, Provider, SnapShotAsset, SnapShotRational, SnapShotTime, SnapShotAddon>where
Provider: ProductProvider<SnapShotAsset, SnapShotRational, SnapShotTime, SnapShotAddon>,
T: Config<I>,
I: 'static,
impl<T, I, Provider> VirtualDynField<SnapShotRational> for ProductType<T, I, Provider, SnapShotAsset, SnapShotRational, SnapShotTime, SnapShotAddon>where
Provider: ProductProvider<SnapShotAsset, SnapShotRational, SnapShotTime, SnapShotAddon>,
T: Config<I>,
I: 'static,
Source§type Repr = SumDynType<<T as Config<I>>::Bias, <Provider as VirtualDynBound<SnapShotRational>>::Bound>
type Repr = SumDynType<<T as Config<I>>::Bias, <Provider as VirtualDynBound<SnapShotRational>>::Bound>
Source§impl<T, I, Provider> VirtualDynField<SnapShotTime> for ProductType<T, I, Provider, SnapShotAsset, SnapShotRational, SnapShotTime, SnapShotAddon>where
Provider: ProductProvider<SnapShotAsset, SnapShotRational, SnapShotTime, SnapShotAddon>,
T: Config<I>,
I: 'static,
impl<T, I, Provider> VirtualDynField<SnapShotTime> for ProductType<T, I, Provider, SnapShotAsset, SnapShotRational, SnapShotTime, SnapShotAddon>where
Provider: ProductProvider<SnapShotAsset, SnapShotRational, SnapShotTime, SnapShotAddon>,
T: Config<I>,
I: 'static,
Source§type Repr = SumDynType<<T as Config<I>>::Time, <Provider as VirtualDynBound<SnapShotTime>>::Bound>
type Repr = SumDynType<<T as Config<I>>::Time, <Provider as VirtualDynBound<SnapShotTime>>::Bound>
Source§impl<T, I> VirtualNMap<ProductType<T, I, <<T as Config<I>>::BalanceContext as ModelContext>::Context, BalanceAsset, BalanceRational, BalanceTime, BalanceAddon>, SnapShotStorage> for Pallet<T, I>where
T: Config<I>,
I: 'static,
VirtualNMap implementation for snapshot storage of VirtualBalance.
impl<T, I> VirtualNMap<ProductType<T, I, <<T as Config<I>>::BalanceContext as ModelContext>::Context, BalanceAsset, BalanceRational, BalanceTime, BalanceAddon>, SnapShotStorage> for Pallet<T, I>where
T: Config<I>,
I: 'static,
VirtualNMap implementation for snapshot storage of VirtualBalance.
Implemented for Pallet since it satisfies the super-bounds of
LazyBalance and provides the concrete virtual storage backend.
Maps (digest, variant, time) -> VirtualSnapShot, enabling
time-indexed balance projections via BalanceSnapShots.
Source§type Key = (<T as Config>::AccountId, <T as Config<I>>::Position, <T as Config<I>>::Time)
type Key = (<T as Config>::AccountId, <T as Config<I>>::Position, <T as Config<I>>::Time)
Source§type Value = ProductType<T, I, <<T as Config<I>>::BalanceContext as ModelContext>::Context, SnapShotAsset, SnapShotRational, SnapShotTime, SnapShotAddon>
type Value = ProductType<T, I, <<T as Config<I>>::BalanceContext as ModelContext>::Context, SnapShotAsset, SnapShotRational, SnapShotTime, SnapShotAddon>
Source§type KeyGen = (Key<Blake2_128Concat, <T as Config>::AccountId>, Key<Blake2_128Concat, <T as Config<I>>::Position>, Key<Blake2_128Concat, <T as Config<I>>::Time>)
type KeyGen = (Key<Blake2_128Concat, <T as Config>::AccountId>, Key<Blake2_128Concat, <T as Config<I>>::Position>, Key<Blake2_128Concat, <T as Config<I>>::Time>)
Key is transformed into storage keys. Read moreSource§type Map = StorageNMap<_GeneratedPrefixForStorageBalanceSnapShots<T, I>, (Key<Blake2_128Concat, <T as Config>::AccountId>, Key<Blake2_128Concat, <T as Config<I>>::Position>, Key<Blake2_128Concat, <T as Config<I>>::Time>), ProductType<T, I, <<T as Config<I>>::BalanceContext as ModelContext>::Context, SnapShotAsset, SnapShotRational, SnapShotTime, SnapShotAddon>>
type Map = StorageNMap<_GeneratedPrefixForStorageBalanceSnapShots<T, I>, (Key<Blake2_128Concat, <T as Config>::AccountId>, Key<Blake2_128Concat, <T as Config<I>>::Position>, Key<Blake2_128Concat, <T as Config<I>>::Time>), ProductType<T, I, <<T as Config<I>>::BalanceContext as ModelContext>::Context, SnapShotAsset, SnapShotRational, SnapShotTime, SnapShotAddon>>
Source§type Query = Option<ProductType<T, I, <<T as Config<I>>::BalanceContext as ModelContext>::Context, SnapShotAsset, SnapShotRational, SnapShotTime, SnapShotAddon>>
type Query = Option<ProductType<T, I, <<T as Config<I>>::BalanceContext as ModelContext>::Context, SnapShotAsset, SnapShotRational, SnapShotTime, SnapShotAddon>>
Source§fn contains_key(key: Self::Key) -> bool
fn contains_key(key: Self::Key) -> bool
key exists.Source§fn mutate<R>(key: Self::Key, f: impl FnOnce(&mut Option<Self::Value>) -> R) -> R
fn mutate<R>(key: Self::Key, f: impl FnOnce(&mut Option<Self::Value>) -> R) -> R
key in-place. Read moreSource§fn iter() -> impl Iterator<Item = (<Self::KeyGen as KeyGenerator>::Key, Self::Value)>
fn iter() -> impl Iterator<Item = (<Self::KeyGen as KeyGenerator>::Key, Self::Value)>
(full_key, value) pairs.Source§fn iter_keys() -> impl Iterator<Item = <Self::KeyGen as KeyGenerator>::Key>
fn iter_keys() -> impl Iterator<Item = <Self::KeyGen as KeyGenerator>::Key>
Source§fn iter_values() -> impl Iterator<Item = Self::Value>
fn iter_values() -> impl Iterator<Item = Self::Value>
Source§fn drain() -> impl Iterator<Item = (<Self::KeyGen as KeyGenerator>::Key, Self::Value)>
fn drain() -> impl Iterator<Item = (<Self::KeyGen as KeyGenerator>::Key, Self::Value)>
(key, value) pairs.Source§fn iter_prefix_values<P>(prefix: P) -> impl Iterator<Item = Self::Value>where
Self::KeyGen: HasKeyPrefix<P>,
fn iter_prefix_values<P>(prefix: P) -> impl Iterator<Item = Self::Value>where
Self::KeyGen: HasKeyPrefix<P>,
Source§fn iter_prefix<P>(
prefix: P,
) -> impl Iterator<Item = (<Self::KeyGen as HasKeyPrefix<P>>::Suffix, Self::Value)>where
Self::KeyGen: HasReversibleKeyPrefix<P>,
fn iter_prefix<P>(
prefix: P,
) -> impl Iterator<Item = (<Self::KeyGen as HasKeyPrefix<P>>::Suffix, Self::Value)>where
Self::KeyGen: HasReversibleKeyPrefix<P>,
(suffix, value) under a prefix. Read moreimpl<T, I, Provider, Asset, Rational, Time, Addon> DecodeWithMemTracking for ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
Provider: ProductProvider<Asset, Rational, Time, Addon>,
T: Config<I>,
I: 'static,
Addon: DiscriminantTag,
Rational: DiscriminantTag,
Time: DiscriminantTag,
Asset: DiscriminantTag,
<Provider as VirtualDynExtensionSchema<Addon>>::Repr: Delimited + Default,
impl<T, I, Provider, Asset, Rational, Time, Addon> EncodeLike for ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
Provider: ProductProvider<Asset, Rational, Time, Addon>,
T: Config<I>,
I: 'static,
Addon: DiscriminantTag,
Rational: DiscriminantTag,
Time: DiscriminantTag,
Asset: DiscriminantTag,
<Provider as VirtualDynExtensionSchema<Addon>>::Repr: Delimited + Default,
impl<T, I, Provider, Asset, Rational, Time, Addon> Eq for ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
Provider: ProductProvider<Asset, Rational, Time, Addon>,
T: Config<I>,
I: 'static,
Addon: DiscriminantTag,
Rational: DiscriminantTag,
Time: DiscriminantTag,
Asset: DiscriminantTag,
Auto Trait Implementations§
impl<T, I, Provider, Asset, Rational, Time, Addon> Freeze for ProductType<T, I, Provider, Asset, Rational, Time, Addon>
impl<T, I, Provider, Asset, Rational, Time, Addon> RefUnwindSafe for ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
<Provider as VirtualDynExtensionSchema<Addon>>::Repr: RefUnwindSafe,
<<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance: RefUnwindSafe,
<T as Config<I>>::Bias: RefUnwindSafe,
<T as Config<I>>::Time: RefUnwindSafe,
<Provider as VirtualDynBound<Asset>>::Bound: RefUnwindSafe,
<Provider as VirtualDynBound<Rational>>::Bound: RefUnwindSafe,
<Provider as VirtualDynBound<Time>>::Bound: RefUnwindSafe,
impl<T, I, Provider, Asset, Rational, Time, Addon> Send for ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
<Provider as VirtualDynExtensionSchema<Addon>>::Repr: Send,
<Provider as VirtualDynBound<Asset>>::Bound: Send,
<Provider as VirtualDynBound<Rational>>::Bound: Send,
<Provider as VirtualDynBound<Time>>::Bound: Send,
impl<T, I, Provider, Asset, Rational, Time, Addon> Sync for ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
<Provider as VirtualDynExtensionSchema<Addon>>::Repr: Sync,
<Provider as VirtualDynBound<Asset>>::Bound: Sync,
<Provider as VirtualDynBound<Rational>>::Bound: Sync,
<Provider as VirtualDynBound<Time>>::Bound: Sync,
impl<T, I, Provider, Asset, Rational, Time, Addon> Unpin for ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
<Provider as VirtualDynExtensionSchema<Addon>>::Repr: Unpin,
<<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance: Unpin,
<T as Config<I>>::Bias: Unpin,
<T as Config<I>>::Time: Unpin,
<Provider as VirtualDynBound<Asset>>::Bound: Unpin,
<Provider as VirtualDynBound<Rational>>::Bound: Unpin,
<Provider as VirtualDynBound<Time>>::Bound: Unpin,
impl<T, I, Provider, Asset, Rational, Time, Addon> UnwindSafe for ProductType<T, I, Provider, Asset, Rational, Time, Addon>where
<Provider as VirtualDynExtensionSchema<Addon>>::Repr: UnwindSafe,
<<T as Config<I>>::Asset as Inspect<<T as Config>::AccountId>>::Balance: UnwindSafe,
<T as Config<I>>::Bias: UnwindSafe,
<T as Config<I>>::Time: UnwindSafe,
<Provider as VirtualDynBound<Asset>>::Bound: UnwindSafe,
<Provider as VirtualDynBound<Rational>>::Bound: UnwindSafe,
<Provider as VirtualDynBound<Time>>::Bound: 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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§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,
§impl<T> DecodeWithMemLimit for Twhere
T: DecodeWithMemTracking,
impl<T> DecodeWithMemLimit for Twhere
T: DecodeWithMemTracking,
Source§impl<T, K> DynExtHelpers<K> for Twhere
T: VirtualDynExtension<K>,
K: DiscriminantTag,
impl<T, K> DynExtHelpers<K> for Twhere
T: VirtualDynExtension<K>,
K: DiscriminantTag,
Source§fn index_get(
&self,
index: usize,
) -> Option<<Self::TypesVia as VirtualDynExtensionSchema<K>>::Some>
fn index_get( &self, index: usize, ) -> Option<<Self::TypesVia as VirtualDynExtensionSchema<K>>::Some>
index from the extension interpreted as Many.Source§fn iter(
&self,
) -> impl Iterator<Item = <Self::TypesVia as VirtualDynExtensionSchema<K>>::Some>
fn iter( &self, ) -> impl Iterator<Item = <Self::TypesVia as VirtualDynExtensionSchema<K>>::Some>
Source§fn index_set(
&mut self,
index: usize,
v: <Self::TypesVia as VirtualDynExtensionSchema<K>>::Some,
) -> Result<(), ()>
fn index_set( &mut self, index: usize, v: <Self::TypesVia as VirtualDynExtensionSchema<K>>::Some, ) -> Result<(), ()>
Source§impl<T, K> DynFieldHelpers<K> for Twhere
T: VirtualDynField<K>,
K: DiscriminantTag,
impl<T, K> DynFieldHelpers<K> for Twhere
T: VirtualDynField<K>,
K: DiscriminantTag,
Source§fn iter(&self) -> impl Iterator<Item = Self::Some>
fn iter(&self) -> impl Iterator<Item = Self::Some>
Many. Read moreSource§fn iter_mut<F>(&mut self, f: F) -> Result<(), ()>
fn iter_mut<F>(&mut self, f: F) -> Result<(), ()>
Many. Read more§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> 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 moreSource§impl<T, U, Tag> IntoTag<U, Tag> for Twhere
U: FromTag<T, Tag>,
Tag: DiscriminantTag,
impl<T, U, Tag> IntoTag<U, Tag> for Twhere
U: FromTag<T, Tag>,
Tag: DiscriminantTag,
§impl<Src, Dest> IntoTuple<Dest> for Srcwhere
Dest: FromTuple<Src>,
impl<Src, Dest> IntoTuple<Dest> for Srcwhere
Dest: FromTuple<Src>,
fn into_tuple(self) -> Dest
§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,
Source§impl<T, Time> Logging<Time> for Twhere
Time: Time,
impl<T, Time> Logging<Time> for Twhere
Time: Time,
Source§const FALLBACK_TARGET: &'static str = "routine"
const FALLBACK_TARGET: &'static str = "routine"
Default logging target if none is provided.
Most routines, especially offchain workers or background tasks, use this target for simplicity.
It allows a consistent place to look for routine logs without requiring every call to specify a target.
Note: This target is only a conveninence and may be somewhat vague. To ensure errors can still be traced accurately, the logged messages should include additional metadata (e.g., module name, error index, or contextual info) so that the source of the error can be identified even if the target is generic.
Source§type Logger = DispatchError
type Logger = DispatchError
The type taken and returned for logging.
We simply return the same [DispatchError] that was logged,
so logging does not change control flow or error propagation.
DispatchError is used because in Substrate it encompasses all
runtime errors - including module errors, token errors, arithmetic
issues, and transactional boundaries - making it the universal
substrate-side error representation.
Source§type Level = LogLevel
type Level = LogLevel
The log level type.
We use the LogLevel enum to standardize severity levels
(Info, Warn, Error, Debug) across all routine logs.
Source§fn log(
level: <T as Logging<Time>>::Level,
err: &<T as Logging<Time>>::Logger,
timestamp: Time,
target: Option<&str>,
fmt: Option<fn(Time, &<T as Logging<Time>>::Level, &str, &str) -> String>,
) -> <T as Logging<Time>>::Logger
fn log( level: <T as Logging<Time>>::Level, err: &<T as Logging<Time>>::Logger, timestamp: Time, target: Option<&str>, fmt: Option<fn(Time, &<T as Logging<Time>>::Level, &str, &str) -> String>, ) -> <T as Logging<Time>>::Logger
Source§fn info(
err: &Self::Logger,
timestamp: Timestamp,
target: Option<&str>,
fmt: Option<fn(Timestamp, &Self::Level, &str, &str) -> String>,
) -> Self::Loggerwhere
Self: Sized,
fn info(
err: &Self::Logger,
timestamp: Timestamp,
target: Option<&str>,
fmt: Option<fn(Timestamp, &Self::Level, &str, &str) -> String>,
) -> Self::Loggerwhere
Self: Sized,
Source§fn warn(
err: &Self::Logger,
timestamp: Timestamp,
target: Option<&str>,
fmt: Option<fn(Timestamp, &Self::Level, &str, &str) -> String>,
) -> Self::Loggerwhere
Self: Sized,
fn warn(
err: &Self::Logger,
timestamp: Timestamp,
target: Option<&str>,
fmt: Option<fn(Timestamp, &Self::Level, &str, &str) -> String>,
) -> Self::Loggerwhere
Self: Sized,
§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, 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.