Struct frame_support::pallet_prelude::StorageNMap
source · [−]pub struct StorageNMap<Prefix, Key, Value, QueryKind = OptionQuery, OnEmpty = GetDefault, MaxValues = GetDefault>(_);
Expand description
A type that allow to store values for an arbitrary number of keys in the form of
(Key<Hasher1, key1>, Key<Hasher2, key2>, ..., Key<HasherN, keyN>)
.
Each value is stored at:
Twox128(Prefix::pallet_prefix())
++ Twox128(Prefix::STORAGE_PREFIX)
++ Hasher1(encode(key1))
++ Hasher2(encode(key2))
++ ...
++ HasherN(encode(keyN))
Warning
If the keys are not trusted (e.g. can be set by a user), a cryptographic hasher
such as blake2_128_concat
must be used for the key hashers. Otherwise, other values
in storage can be compromised.
Implementations
impl<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> StorageNMap<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> where
Prefix: StorageInstance,
Key: KeyGenerator,
Value: FullCodec,
QueryKind: QueryKindTrait<Value, OnEmpty>,
OnEmpty: Get<QueryKind::Query> + 'static,
MaxValues: Get<Option<u32>>,
impl<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> StorageNMap<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> where
Prefix: StorageInstance,
Key: KeyGenerator,
Value: FullCodec,
QueryKind: QueryKindTrait<Value, OnEmpty>,
OnEmpty: Get<QueryKind::Query> + 'static,
MaxValues: Get<Option<u32>>,
pub fn hashed_key_for<KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter>(
key: KArg
) -> Vec<u8>ⓘ
pub fn hashed_key_for<KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter>(
key: KArg
) -> Vec<u8>ⓘ
Get the storage key used to fetch a value corresponding to a specific key.
pub fn contains_key<KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter>(
key: KArg
) -> bool
pub fn contains_key<KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter>(
key: KArg
) -> bool
Does the value (explicitly) exist in storage?
pub fn get<KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter>(
key: KArg
) -> QueryKind::Query
pub fn get<KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter>(
key: KArg
) -> QueryKind::Query
Load the value associated with the given key from the map.
pub fn try_get<KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter>(
key: KArg
) -> Result<Value, ()>
pub fn try_get<KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter>(
key: KArg
) -> Result<Value, ()>
Try to get the value for the given key from the map.
Returns Ok
if it exists, Err
if not.
pub fn take<KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter>(
key: KArg
) -> QueryKind::Query
pub fn take<KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter>(
key: KArg
) -> QueryKind::Query
Take a value from storage, removing it afterwards.
pub fn swap<KOther, KArg1, KArg2>(key1: KArg1, key2: KArg2) where
KOther: KeyGenerator,
KArg1: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter,
KArg2: EncodeLikeTuple<KOther::KArg> + TupleToEncodedIter,
pub fn swap<KOther, KArg1, KArg2>(key1: KArg1, key2: KArg2) where
KOther: KeyGenerator,
KArg1: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter,
KArg2: EncodeLikeTuple<KOther::KArg> + TupleToEncodedIter,
Swap the values of two key-pairs.
pub fn insert<KArg, VArg>(key: KArg, val: VArg) where
KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter,
VArg: EncodeLike<Value>,
pub fn insert<KArg, VArg>(key: KArg, val: VArg) where
KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter,
VArg: EncodeLike<Value>,
Store a value to be associated with the given keys from the map.
Remove the value under the given keys.
pub fn remove_prefix<KP>(
partial_key: KP,
limit: Option<u32>
) -> KillStorageResult where
Key: HasKeyPrefix<KP>,
pub fn remove_prefix<KP>(
partial_key: KP,
limit: Option<u32>
) -> KillStorageResult where
Key: HasKeyPrefix<KP>,
Remove all values under the first key.
pub fn iter_prefix_values<KP>(partial_key: KP) -> PrefixIterator<Value>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
where
Key: HasKeyPrefix<KP>,
pub fn iter_prefix_values<KP>(partial_key: KP) -> PrefixIterator<Value>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
where
Key: HasKeyPrefix<KP>,
impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
Iterate over values that share the first key.
pub fn mutate<KArg, R, F>(key: KArg, f: F) -> R where
KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter,
F: FnOnce(&mut QueryKind::Query) -> R,
pub fn mutate<KArg, R, F>(key: KArg, f: F) -> R where
KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter,
F: FnOnce(&mut QueryKind::Query) -> R,
Mutate the value under the given keys.
pub fn try_mutate<KArg, R, E, F>(key: KArg, f: F) -> Result<R, E> where
KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter,
F: FnOnce(&mut QueryKind::Query) -> Result<R, E>,
pub fn try_mutate<KArg, R, E, F>(key: KArg, f: F) -> Result<R, E> where
KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter,
F: FnOnce(&mut QueryKind::Query) -> Result<R, E>,
Mutate the value under the given keys when the closure returns Ok
.
pub fn mutate_exists<KArg, R, F>(key: KArg, f: F) -> R where
KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter,
F: FnOnce(&mut Option<Value>) -> R,
pub fn mutate_exists<KArg, R, F>(key: KArg, f: F) -> R where
KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter,
F: FnOnce(&mut Option<Value>) -> R,
Mutate the value under the given keys. Deletes the item if mutated to a None
.
pub fn try_mutate_exists<KArg, R, E, F>(key: KArg, f: F) -> Result<R, E> where
KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter,
F: FnOnce(&mut Option<Value>) -> Result<R, E>,
pub fn try_mutate_exists<KArg, R, E, F>(key: KArg, f: F) -> Result<R, E> where
KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter,
F: FnOnce(&mut Option<Value>) -> Result<R, E>,
Mutate the item, only if an Ok
value is returned. Deletes the item if mutated to a None
.
pub fn append<Item, EncodeLikeItem, KArg>(key: KArg, item: EncodeLikeItem) where
KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter,
Item: Encode,
EncodeLikeItem: EncodeLike<Item>,
Value: StorageAppend<Item>,
pub fn append<Item, EncodeLikeItem, KArg>(key: KArg, item: EncodeLikeItem) where
KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter,
Item: Encode,
EncodeLikeItem: EncodeLike<Item>,
Value: StorageAppend<Item>,
Append the given item to the value in the storage.
Value
is required to implement StorageAppend
.
Warning
If the storage item is not encoded properly, the storage will be overwritten
and set to [item]
. Any default value set for the storage item will be ignored
on overwrite.
pub fn decode_len<KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter>(
key: KArg
) -> Option<usize> where
Value: StorageDecodeLength,
pub fn decode_len<KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter>(
key: KArg
) -> Option<usize> where
Value: StorageDecodeLength,
Read the length of the storage value without decoding the entire value under the
given key1
and key2
.
Value
is required to implement StorageDecodeLength
.
If the value does not exists or it fails to decode the length, None
is returned.
Otherwise Some(len)
is returned.
Warning
None
does not mean that get()
does not return a value. The default value is completly
ignored by this function.
pub fn migrate_keys<KArg>(key: KArg, hash_fns: Key::HArg) -> Option<Value> where
KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter,
pub fn migrate_keys<KArg>(key: KArg, hash_fns: Key::HArg) -> Option<Value> where
KArg: EncodeLikeTuple<Key::KArg> + TupleToEncodedIter,
Migrate an item with the given key
from defunct hash_fns
to the current hashers.
If the key doesn’t exist, then it’s a no-op. If it does, then it returns its value.
Remove all value of the storage.
pub fn iter_values() -> PrefixIterator<Value>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
pub fn iter_values() -> PrefixIterator<Value>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
Iter over all value of the storage.
NOTE: If a value failed to decode because storage is corrupted then it is skipped.
Translate the values of all elements by a function f
, in the map in no particular order.
By returning None
from f
for an element, you’ll remove it from the map.
NOTE: If a value fail to decode because storage is corrupted then it is skipped.
Warning
This function must be used with care, before being updated the storage still contains the
old type, thus other calls (such as get
) will fail at decoding it.
Usage
This would typically be called inside the module implementation of on_runtime_upgrade.
impl<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> StorageNMap<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> where
Prefix: StorageInstance,
Key: ReversibleKeyGenerator,
Value: FullCodec,
QueryKind: QueryKindTrait<Value, OnEmpty>,
OnEmpty: Get<QueryKind::Query> + 'static,
MaxValues: Get<Option<u32>>,
impl<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> StorageNMap<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> where
Prefix: StorageInstance,
Key: ReversibleKeyGenerator,
Value: FullCodec,
QueryKind: QueryKindTrait<Value, OnEmpty>,
OnEmpty: Get<QueryKind::Query> + 'static,
MaxValues: Get<Option<u32>>,
pub fn iter_prefix<KP>(
kp: KP
) -> PrefixIterator<(<Key as HasKeyPrefix<KP>>::Suffix, Value)>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
where
Key: HasReversibleKeyPrefix<KP>,
pub fn iter_prefix<KP>(
kp: KP
) -> PrefixIterator<(<Key as HasKeyPrefix<KP>>::Suffix, Value)>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
where
Key: HasReversibleKeyPrefix<KP>,
impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
Enumerate all elements in the map with prefix key kp
in no particular order.
If you add or remove values whose prefix key is kp
to the map while doing this, you’ll get
undefined results.
pub fn iter_prefix_from<KP>(
kp: KP,
starting_raw_key: Vec<u8>
) -> PrefixIterator<(<Key as HasKeyPrefix<KP>>::Suffix, Value)>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
where
Key: HasReversibleKeyPrefix<KP>,
pub fn iter_prefix_from<KP>(
kp: KP,
starting_raw_key: Vec<u8>
) -> PrefixIterator<(<Key as HasKeyPrefix<KP>>::Suffix, Value)>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
where
Key: HasReversibleKeyPrefix<KP>,
impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
Enumerate all elements in the map with prefix key kp
after a specified starting_raw_key
in no particular order.
If you add or remove values whose prefix key is kp
to the map while doing this, you’ll get
undefined results.
pub fn iter_key_prefix<KP>(
kp: KP
) -> KeyPrefixIterator<<Key as HasKeyPrefix<KP>>::Suffix>ⓘNotable traits for KeyPrefixIterator<T>impl<T> Iterator for KeyPrefixIterator<T> type Item = T;
where
Key: HasReversibleKeyPrefix<KP>,
pub fn iter_key_prefix<KP>(
kp: KP
) -> KeyPrefixIterator<<Key as HasKeyPrefix<KP>>::Suffix>ⓘNotable traits for KeyPrefixIterator<T>impl<T> Iterator for KeyPrefixIterator<T> type Item = T;
where
Key: HasReversibleKeyPrefix<KP>,
impl<T> Iterator for KeyPrefixIterator<T> type Item = T;
Enumerate all suffix keys in the map with prefix key kp
in no particular order.
If you add or remove values whose prefix key is kp
to the map while doing this, you’ll get
undefined results.
pub fn iter_key_prefix_from<KP>(
kp: KP,
starting_raw_key: Vec<u8>
) -> KeyPrefixIterator<<Key as HasKeyPrefix<KP>>::Suffix>ⓘNotable traits for KeyPrefixIterator<T>impl<T> Iterator for KeyPrefixIterator<T> type Item = T;
where
Key: HasReversibleKeyPrefix<KP>,
pub fn iter_key_prefix_from<KP>(
kp: KP,
starting_raw_key: Vec<u8>
) -> KeyPrefixIterator<<Key as HasKeyPrefix<KP>>::Suffix>ⓘNotable traits for KeyPrefixIterator<T>impl<T> Iterator for KeyPrefixIterator<T> type Item = T;
where
Key: HasReversibleKeyPrefix<KP>,
impl<T> Iterator for KeyPrefixIterator<T> type Item = T;
Enumerate all suffix keys in the map with prefix key kp
after a specified
starting_raw_key
in no particular order.
If you add or remove values whose prefix key is kp
to the map while doing this, you’ll get
undefined results.
pub fn drain_prefix<KP>(
kp: KP
) -> PrefixIterator<(<Key as HasKeyPrefix<KP>>::Suffix, Value)>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
where
Key: HasReversibleKeyPrefix<KP>,
pub fn drain_prefix<KP>(
kp: KP
) -> PrefixIterator<(<Key as HasKeyPrefix<KP>>::Suffix, Value)>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
where
Key: HasReversibleKeyPrefix<KP>,
impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
Remove all elements from the map with prefix key kp
and iterate through them in no
particular order.
If you add elements with prefix key k1
to the map while doing this, you’ll get undefined
results.
pub fn iter() -> PrefixIterator<(Key::Key, Value)>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
pub fn iter() -> PrefixIterator<(Key::Key, Value)>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
Enumerate all elements in the map in no particular order.
If you add or remove values to the map while doing this, you’ll get undefined results.
pub fn iter_from(starting_raw_key: Vec<u8>) -> PrefixIterator<(Key::Key, Value)>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
pub fn iter_from(starting_raw_key: Vec<u8>) -> PrefixIterator<(Key::Key, Value)>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
Enumerate all elements in the map after a specified starting_key
in no particular order.
If you add or remove values to the map while doing this, you’ll get undefined results.
pub fn iter_keys() -> KeyPrefixIterator<Key::Key>ⓘNotable traits for KeyPrefixIterator<T>impl<T> Iterator for KeyPrefixIterator<T> type Item = T;
pub fn iter_keys() -> KeyPrefixIterator<Key::Key>ⓘNotable traits for KeyPrefixIterator<T>impl<T> Iterator for KeyPrefixIterator<T> type Item = T;
impl<T> Iterator for KeyPrefixIterator<T> type Item = T;
Enumerate all keys in the map in no particular order.
If you add or remove values to the map while doing this, you’ll get undefined results.
pub fn iter_keys_from(starting_raw_key: Vec<u8>) -> KeyPrefixIterator<Key::Key>ⓘNotable traits for KeyPrefixIterator<T>impl<T> Iterator for KeyPrefixIterator<T> type Item = T;
pub fn iter_keys_from(starting_raw_key: Vec<u8>) -> KeyPrefixIterator<Key::Key>ⓘNotable traits for KeyPrefixIterator<T>impl<T> Iterator for KeyPrefixIterator<T> type Item = T;
impl<T> Iterator for KeyPrefixIterator<T> type Item = T;
Enumerate all keys in the map after a specified starting_raw_key
in no particular order.
If you add or remove values to the map while doing this, you’ll get undefined results.
pub fn drain() -> PrefixIterator<(Key::Key, Value)>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
pub fn drain() -> PrefixIterator<(Key::Key, Value)>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
Remove all elements from the map and iterate through them in no particular order.
If you add elements to the map while doing this, you’ll get undefined results.
Translate the values of all elements by a function f
, in the map in no particular order.
By returning None
from f
for an element, you’ll remove it from the map.
NOTE: If a value fail to decode because storage is corrupted then it is skipped.
Trait Implementations
impl<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> PartialStorageInfoTrait for StorageNMap<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> where
Prefix: StorageInstance,
Key: KeyGenerator,
Value: FullCodec,
QueryKind: QueryKindTrait<Value, OnEmpty>,
OnEmpty: Get<QueryKind::Query> + 'static,
MaxValues: Get<Option<u32>>,
impl<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> PartialStorageInfoTrait for StorageNMap<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> where
Prefix: StorageInstance,
Key: KeyGenerator,
Value: FullCodec,
QueryKind: QueryKindTrait<Value, OnEmpty>,
OnEmpty: Get<QueryKind::Query> + 'static,
MaxValues: Get<Option<u32>>,
It doesn’t require to implement MaxEncodedLen
and give no information for max_size
.
fn partial_storage_info() -> Vec<StorageInfo>ⓘ
impl<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> StorageEntryMetadataBuilder for StorageNMap<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> where
Prefix: StorageInstance,
Key: KeyGenerator,
Value: FullCodec + StaticTypeInfo,
QueryKind: QueryKindTrait<Value, OnEmpty>,
OnEmpty: Get<QueryKind::Query> + 'static,
MaxValues: Get<Option<u32>>,
impl<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> StorageEntryMetadataBuilder for StorageNMap<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> where
Prefix: StorageInstance,
Key: KeyGenerator,
Value: FullCodec + StaticTypeInfo,
QueryKind: QueryKindTrait<Value, OnEmpty>,
OnEmpty: Get<QueryKind::Query> + 'static,
MaxValues: Get<Option<u32>>,
Build into entries
the storage metadata entries of a storage given some docs
.
impl<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> StorageInfoTrait for StorageNMap<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> where
Prefix: StorageInstance,
Key: KeyGenerator + KeyGeneratorMaxEncodedLen,
Value: FullCodec + MaxEncodedLen,
QueryKind: QueryKindTrait<Value, OnEmpty>,
OnEmpty: Get<QueryKind::Query> + 'static,
MaxValues: Get<Option<u32>>,
impl<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> StorageInfoTrait for StorageNMap<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> where
Prefix: StorageInstance,
Key: KeyGenerator + KeyGeneratorMaxEncodedLen,
Value: FullCodec + MaxEncodedLen,
QueryKind: QueryKindTrait<Value, OnEmpty>,
OnEmpty: Get<QueryKind::Query> + 'static,
MaxValues: Get<Option<u32>>,
fn storage_info() -> Vec<StorageInfo>ⓘ
impl<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> StoragePrefixedMap<Value> for StorageNMap<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> where
Prefix: StorageInstance,
Key: KeyGenerator,
Value: FullCodec,
QueryKind: QueryKindTrait<Value, OnEmpty>,
OnEmpty: Get<QueryKind::Query> + 'static,
MaxValues: Get<Option<u32>>,
impl<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> StoragePrefixedMap<Value> for StorageNMap<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> where
Prefix: StorageInstance,
Key: KeyGenerator,
Value: FullCodec,
QueryKind: QueryKindTrait<Value, OnEmpty>,
OnEmpty: Get<QueryKind::Query> + 'static,
MaxValues: Get<Option<u32>>,
Module prefix. Used for generating final key.
Storage prefix. Used for generating final key.
Final full prefix that prefixes all keys.
Remove all value of the storage.
fn iter_values() -> PrefixIterator<Value>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
fn iter_values() -> PrefixIterator<Value>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
Iter over all value of the storage. Read more
Auto Trait Implementations
impl<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> RefUnwindSafe for StorageNMap<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> where
Key: RefUnwindSafe,
MaxValues: RefUnwindSafe,
OnEmpty: RefUnwindSafe,
Prefix: RefUnwindSafe,
QueryKind: RefUnwindSafe,
Value: RefUnwindSafe,
impl<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> Send for StorageNMap<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> where
Key: Send,
MaxValues: Send,
OnEmpty: Send,
Prefix: Send,
QueryKind: Send,
Value: Send,
impl<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> Sync for StorageNMap<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> where
Key: Sync,
MaxValues: Sync,
OnEmpty: Sync,
Prefix: Sync,
QueryKind: Sync,
Value: Sync,
impl<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> Unpin for StorageNMap<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> where
Key: Unpin,
MaxValues: Unpin,
OnEmpty: Unpin,
Prefix: Unpin,
QueryKind: Unpin,
Value: Unpin,
impl<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> UnwindSafe for StorageNMap<Prefix, Key, Value, QueryKind, OnEmpty, MaxValues> where
Key: UnwindSafe,
MaxValues: UnwindSafe,
OnEmpty: UnwindSafe,
Prefix: UnwindSafe,
QueryKind: UnwindSafe,
Value: UnwindSafe,
Blanket Implementations
Mutably borrows from an owned value. Read more
pub fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>ⓘimpl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;
pub fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>ⓘimpl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;
impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;
Convert 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
. Read more
Convert Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
. Read more
Convert &Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s. Read more
Convert &mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s. Read more
impl<K, V, G> IterableStorageNMap<K, V> for G where
K: ReversibleKeyGenerator,
V: FullCodec,
G: StorageNMap<K, V>,
impl<K, V, G> IterableStorageNMap<K, V> for G where
K: ReversibleKeyGenerator,
V: FullCodec,
G: StorageNMap<K, V>,
type KeyIterator = KeyPrefixIterator<K::Key>
type KeyIterator = KeyPrefixIterator<K::Key>
The type that iterates over all (key1, key2, key3, ... keyN)
tuples.
type Iterator = PrefixIterator<(K::Key, V)>
type Iterator = PrefixIterator<(K::Key, V)>
The type that iterates over all (key1, key2, key3, ... keyN), value)
tuples.
fn iter_prefix<KP>(
kp: KP
) -> PrefixIterator<(<K as HasKeyPrefix<KP>>::Suffix, V)>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
where
K: HasReversibleKeyPrefix<KP>,
fn iter_prefix<KP>(
kp: KP
) -> PrefixIterator<(<K as HasKeyPrefix<KP>>::Suffix, V)>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
where
K: HasReversibleKeyPrefix<KP>,
impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
Enumerate all elements in the map with prefix key kp
in lexicographical order of the
encoded key. If you add or remove values whose prefix is kp
to the map while doing this,
you’ll get undefined results. Read more
fn iter_prefix_from<KP>(
kp: KP,
starting_raw_key: Vec<u8>
) -> PrefixIterator<(<K as HasKeyPrefix<KP>>::Suffix, V)>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
where
K: HasReversibleKeyPrefix<KP>,
fn iter_prefix_from<KP>(
kp: KP,
starting_raw_key: Vec<u8>
) -> PrefixIterator<(<K as HasKeyPrefix<KP>>::Suffix, V)>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
where
K: HasReversibleKeyPrefix<KP>,
impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
Enumerate all elements in the map with prefix key kp
after a specified starting_raw_key
in lexicographical order of the encoded key. If you add or remove values whose prefix is
kp
to the map while doing this, you’ll get undefined results. Read more
fn iter_key_prefix<KP>(
kp: KP
) -> KeyPrefixIterator<<K as HasKeyPrefix<KP>>::Suffix>ⓘNotable traits for KeyPrefixIterator<T>impl<T> Iterator for KeyPrefixIterator<T> type Item = T;
where
K: HasReversibleKeyPrefix<KP>,
fn iter_key_prefix<KP>(
kp: KP
) -> KeyPrefixIterator<<K as HasKeyPrefix<KP>>::Suffix>ⓘNotable traits for KeyPrefixIterator<T>impl<T> Iterator for KeyPrefixIterator<T> type Item = T;
where
K: HasReversibleKeyPrefix<KP>,
impl<T> Iterator for KeyPrefixIterator<T> type Item = T;
Enumerate all suffix keys in the map with prefix key kp
in lexicographical order of the
encoded key. If you add or remove values whose prefix is kp
to the map while doing this,
you’ll get undefined results. Read more
fn iter_key_prefix_from<KP>(
kp: KP,
starting_raw_key: Vec<u8>
) -> KeyPrefixIterator<<K as HasKeyPrefix<KP>>::Suffix>ⓘNotable traits for KeyPrefixIterator<T>impl<T> Iterator for KeyPrefixIterator<T> type Item = T;
where
K: HasReversibleKeyPrefix<KP>,
fn iter_key_prefix_from<KP>(
kp: KP,
starting_raw_key: Vec<u8>
) -> KeyPrefixIterator<<K as HasKeyPrefix<KP>>::Suffix>ⓘNotable traits for KeyPrefixIterator<T>impl<T> Iterator for KeyPrefixIterator<T> type Item = T;
where
K: HasReversibleKeyPrefix<KP>,
impl<T> Iterator for KeyPrefixIterator<T> type Item = T;
Enumerate all suffix keys in the map with prefix key kp
after a specified
starting_raw_key
in lexicographical order of the encoded key. If you add or remove values
whose prefix is kp
to the map while doing this, you’ll get undefined results. Read more
fn drain_prefix<KP>(
kp: KP
) -> PrefixIterator<(<K as HasKeyPrefix<KP>>::Suffix, V)>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
where
K: HasReversibleKeyPrefix<KP>,
fn drain_prefix<KP>(
kp: KP
) -> PrefixIterator<(<K as HasKeyPrefix<KP>>::Suffix, V)>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
where
K: HasReversibleKeyPrefix<KP>,
impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
Remove all elements from the map with prefix key kp
and iterate through them in
lexicographical order of the encoded key. If you add elements with prefix key kp
to the
map while doing this, you’ll get undefined results. Read more
Enumerate all elements in the map in lexicographical order of the encoded key. If you add or remove values to the map while doing this, you’ll get undefined results. Read more
Enumerate all elements in the map after a specified starting_raw_key
in lexicographical
order of the encoded key. If you add or remove values to the map while doing this, you’ll
get undefined results. Read more
Enumerate all keys in the map in lexicographical order of the encoded key. If you add or remove values to the map while doing this, you’ll get undefined results. Read more
Enumerate all keys in the map after starting_raw_key
in lexicographical order of the
encoded key. If you add or remove values to the map while doing this, you’ll get undefined
results. Read more
Remove all elements from the map and iterate through them in lexicographical order of the encoded key. If you add elements to the map while doing this, you’ll get undefined results. Read more
impl<K, V, G> StorageNMap<K, V> for G where
K: KeyGenerator,
V: FullCodec,
G: StorageNMap<K, V>,
impl<K, V, G> StorageNMap<K, V> for G where
K: KeyGenerator,
V: FullCodec,
G: StorageNMap<K, V>,
type Query = G::Query
type Query = G::Query
The type that get/take returns.
fn hashed_key_for<KArg: EncodeLikeTuple<K::KArg> + TupleToEncodedIter>(
key: KArg
) -> Vec<u8>ⓘ
fn hashed_key_for<KArg: EncodeLikeTuple<K::KArg> + TupleToEncodedIter>(
key: KArg
) -> Vec<u8>ⓘ
Get the storage key used to fetch a value corresponding to a specific key.
Does the value (explicitly) exist in storage?
Load the value associated with the given key from the map.
Try to get the value for the given key from the map. Read more
Take the value under a key.
fn swap<KOther, KArg1, KArg2>(key1: KArg1, key2: KArg2) where
KOther: KeyGenerator,
KArg1: EncodeLikeTuple<K::KArg> + TupleToEncodedIter,
KArg2: EncodeLikeTuple<KOther::KArg> + TupleToEncodedIter,
fn swap<KOther, KArg1, KArg2>(key1: KArg1, key2: KArg2) where
KOther: KeyGenerator,
KArg1: EncodeLikeTuple<K::KArg> + TupleToEncodedIter,
KArg2: EncodeLikeTuple<KOther::KArg> + TupleToEncodedIter,
Swap the values of two keys.
fn insert<KArg, VArg>(key: KArg, val: VArg) where
KArg: EncodeLikeTuple<K::KArg> + TupleToEncodedIter,
VArg: EncodeLike<V>,
fn insert<KArg, VArg>(key: KArg, val: VArg) where
KArg: EncodeLikeTuple<K::KArg> + TupleToEncodedIter,
VArg: EncodeLike<V>,
Store a value to be associated with the given key from the map.
Remove the value under a key.
fn remove_prefix<KP>(partial_key: KP, limit: Option<u32>) -> KillStorageResult where
K: HasKeyPrefix<KP>,
fn remove_prefix<KP>(partial_key: KP, limit: Option<u32>) -> KillStorageResult where
K: HasKeyPrefix<KP>,
Remove all values under the partial prefix key.
fn iter_prefix_values<KP>(partial_key: KP) -> PrefixIterator<V>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
where
K: HasKeyPrefix<KP>,
fn iter_prefix_values<KP>(partial_key: KP) -> PrefixIterator<V>ⓘNotable traits for PrefixIterator<T, OnRemoval>impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
where
K: HasKeyPrefix<KP>,
impl<T, OnRemoval: PrefixIteratorOnRemoval> Iterator for PrefixIterator<T, OnRemoval> type Item = T;
Iterate over values that share the partial prefix key.
fn mutate<KArg, R, F>(key: KArg, f: F) -> R where
KArg: EncodeLikeTuple<K::KArg> + TupleToEncodedIter,
F: FnOnce(&mut Self::Query) -> R,
fn mutate<KArg, R, F>(key: KArg, f: F) -> R where
KArg: EncodeLikeTuple<K::KArg> + TupleToEncodedIter,
F: FnOnce(&mut Self::Query) -> R,
Mutate the value under a key.
fn try_mutate<KArg, R, E, F>(key: KArg, f: F) -> Result<R, E> where
KArg: EncodeLikeTuple<K::KArg> + TupleToEncodedIter,
F: FnOnce(&mut Self::Query) -> Result<R, E>,
fn try_mutate<KArg, R, E, F>(key: KArg, f: F) -> Result<R, E> where
KArg: EncodeLikeTuple<K::KArg> + TupleToEncodedIter,
F: FnOnce(&mut Self::Query) -> Result<R, E>,
Mutate the item, only if an Ok
value is returned.
fn mutate_exists<KArg, R, F>(key: KArg, f: F) -> R where
KArg: EncodeLikeTuple<K::KArg> + TupleToEncodedIter,
F: FnOnce(&mut Option<V>) -> R,
fn mutate_exists<KArg, R, F>(key: KArg, f: F) -> R where
KArg: EncodeLikeTuple<K::KArg> + TupleToEncodedIter,
F: FnOnce(&mut Option<V>) -> R,
Mutate the value under a key. Read more
fn try_mutate_exists<KArg, R, E, F>(key: KArg, f: F) -> Result<R, E> where
KArg: EncodeLikeTuple<K::KArg> + TupleToEncodedIter,
F: FnOnce(&mut Option<V>) -> Result<R, E>,
fn try_mutate_exists<KArg, R, E, F>(key: KArg, f: F) -> Result<R, E> where
KArg: EncodeLikeTuple<K::KArg> + TupleToEncodedIter,
F: FnOnce(&mut Option<V>) -> Result<R, E>,
Mutate the item, only if an Ok
value is returned. Deletes the item if mutated to a None
.
fn append<Item, EncodeLikeItem, KArg>(key: KArg, item: EncodeLikeItem) where
KArg: EncodeLikeTuple<K::KArg> + TupleToEncodedIter,
Item: Encode,
EncodeLikeItem: EncodeLike<Item>,
V: StorageAppend<Item>,
fn append<Item, EncodeLikeItem, KArg>(key: KArg, item: EncodeLikeItem) where
KArg: EncodeLikeTuple<K::KArg> + TupleToEncodedIter,
Item: Encode,
EncodeLikeItem: EncodeLike<Item>,
V: StorageAppend<Item>,
Append the given items to the value in the storage. Read more
fn migrate_keys<KArg>(key: KArg, hash_fns: K::HArg) -> Option<V> where
KArg: EncodeLikeTuple<K::KArg> + TupleToEncodedIter,
fn migrate_keys<KArg>(key: KArg, hash_fns: K::HArg) -> Option<V> where
KArg: EncodeLikeTuple<K::KArg> + TupleToEncodedIter,
Migrate an item with the given key
from defunct hash_fns
to the current hashers. Read more
fn decode_len<KArg: EncodeLikeTuple<K::KArg> + TupleToEncodedIter>(
key: KArg
) -> Option<usize> where
V: StorageDecodeLength,
fn decode_len<KArg: EncodeLikeTuple<K::KArg> + TupleToEncodedIter>(
key: KArg
) -> Option<usize> where
V: StorageDecodeLength,
Read the length of the storage value without decoding the entire value under the
given key
. Read more
The counterpart to unchecked_from
.
Consume self to return an equivalent value of T
.
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more