Struct frame_support::storage::types::StorageNMap [−][src]
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.
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>
impl<T> Iterator for PrefixIterator<T> type Item = T;
where
Key: HasKeyPrefix<KP>,
pub fn iter_prefix_values<KP>(partial_key: KP) -> PrefixIterator<Value>ⓘNotable traits for PrefixIterator<T>
impl<T> Iterator for PrefixIterator<T> type Item = T;
where
Key: HasKeyPrefix<KP>,
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>
impl<T> Iterator for PrefixIterator<T> type Item = T;
pub fn iter_values() -> PrefixIterator<Value>ⓘNotable traits for PrefixIterator<T>
impl<T> Iterator for PrefixIterator<T> 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>
impl<T> Iterator for PrefixIterator<T> 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>
impl<T> Iterator for PrefixIterator<T> type Item = T;
where
Key: HasReversibleKeyPrefix<KP>,
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>
impl<T> Iterator for PrefixIterator<T> 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>
impl<T> Iterator for PrefixIterator<T> type Item = T;
where
Key: HasReversibleKeyPrefix<KP>,
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>,
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>,
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>
impl<T> Iterator for PrefixIterator<T> 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>
impl<T> Iterator for PrefixIterator<T> type Item = T;
where
Key: HasReversibleKeyPrefix<KP>,
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>
impl<T> Iterator for PrefixIterator<T> type Item = T;
pub fn iter() -> PrefixIterator<(Key::Key, Value)>ⓘNotable traits for PrefixIterator<T>
impl<T> Iterator for PrefixIterator<T> 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>
impl<T> Iterator for PrefixIterator<T> type Item = T;
pub fn iter_from(starting_raw_key: Vec<u8>) -> PrefixIterator<(Key::Key, Value)>ⓘNotable traits for PrefixIterator<T>
impl<T> Iterator for PrefixIterator<T> 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;
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;
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>
impl<T> Iterator for PrefixIterator<T> type Item = T;
pub fn drain() -> PrefixIterator<(Key::Key, Value)>ⓘNotable traits for PrefixIterator<T>
impl<T> Iterator for PrefixIterator<T> 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> 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> StorageNMapMetadata 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> StorageNMapMetadata 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>>,
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>
impl<T> Iterator for PrefixIterator<T> type Item = T;
fn iter_values() -> PrefixIterator<Value>ⓘNotable traits for PrefixIterator<T>
impl<T> Iterator for PrefixIterator<T> 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
impl<T> Downcast for T where
T: Any,
impl<T> Downcast for T where
T: Any,
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
pub fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
pub fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
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
pub fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
pub fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
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
Instruments this type with the provided Span
, returning an
Instrumented
wrapper. 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 as KeyGenerator>::Key>
type KeyIterator = KeyPrefixIterator<<K as KeyGenerator>::Key>
The type that iterates over all (key1, key2, key3, ... keyN)
tuples.
type Iterator = PrefixIterator<(<K as KeyGenerator>::Key, V)>
type Iterator = PrefixIterator<(<K as KeyGenerator>::Key, V)>
The type that iterates over all (key1, key2, key3, ... keyN), value)
tuples.
pub fn iter_prefix<KP>(
KP
) -> PrefixIterator<(<K as HasKeyPrefix<KP>>::Suffix, V)>ⓘNotable traits for PrefixIterator<T>
impl<T> Iterator for PrefixIterator<T> type Item = T;
where
K: HasReversibleKeyPrefix<KP>,
pub fn iter_prefix<KP>(
KP
) -> PrefixIterator<(<K as HasKeyPrefix<KP>>::Suffix, V)>ⓘNotable traits for PrefixIterator<T>
impl<T> Iterator for PrefixIterator<T> type Item = T;
where
K: HasReversibleKeyPrefix<KP>,
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
pub fn iter_prefix_from<KP>(
KP,
Vec<u8, Global>
) -> PrefixIterator<(<K as HasKeyPrefix<KP>>::Suffix, V)>ⓘNotable traits for PrefixIterator<T>
impl<T> Iterator for PrefixIterator<T> type Item = T;
where
K: HasReversibleKeyPrefix<KP>,
pub fn iter_prefix_from<KP>(
KP,
Vec<u8, Global>
) -> PrefixIterator<(<K as HasKeyPrefix<KP>>::Suffix, V)>ⓘNotable traits for PrefixIterator<T>
impl<T> Iterator for PrefixIterator<T> type Item = T;
where
K: HasReversibleKeyPrefix<KP>,
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
pub fn iter_key_prefix<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>,
pub fn iter_key_prefix<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>,
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
pub fn iter_key_prefix_from<KP>(
KP,
Vec<u8, Global>
) -> KeyPrefixIterator<<K as HasKeyPrefix<KP>>::Suffix>ⓘNotable traits for KeyPrefixIterator<T>
impl<T> Iterator for KeyPrefixIterator<T> type Item = T;
where
K: HasReversibleKeyPrefix<KP>,
pub fn iter_key_prefix_from<KP>(
KP,
Vec<u8, Global>
) -> KeyPrefixIterator<<K as HasKeyPrefix<KP>>::Suffix>ⓘNotable traits for KeyPrefixIterator<T>
impl<T> Iterator for KeyPrefixIterator<T> type Item = T;
where
K: HasReversibleKeyPrefix<KP>,
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
pub fn drain_prefix<KP>(
KP
) -> PrefixIterator<(<K as HasKeyPrefix<KP>>::Suffix, V)>ⓘNotable traits for PrefixIterator<T>
impl<T> Iterator for PrefixIterator<T> type Item = T;
where
K: HasReversibleKeyPrefix<KP>,
pub fn drain_prefix<KP>(
KP
) -> PrefixIterator<(<K as HasKeyPrefix<KP>>::Suffix, V)>ⓘNotable traits for PrefixIterator<T>
impl<T> Iterator for PrefixIterator<T> type Item = T;
where
K: HasReversibleKeyPrefix<KP>,
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
type Output = T
type Output = T
Should always be Self
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 as StorageNMap<K, V>>::Query
type Query = <G as StorageNMap<K, V>>::Query
The type that get/take returns.
pub fn hashed_key_for<KArg>(KArg) -> Vec<u8, Global>ⓘ where
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
pub fn hashed_key_for<KArg>(KArg) -> Vec<u8, Global>ⓘ where
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
Get the storage key used to fetch a value corresponding to a specific key.
pub fn contains_key<KArg>(KArg) -> bool where
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
pub fn contains_key<KArg>(KArg) -> bool where
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
Does the value (explicitly) exist in storage?
pub fn get<KArg>(KArg) -> <G as StorageNMap<K, V>>::Query where
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
pub fn get<KArg>(KArg) -> <G as StorageNMap<K, V>>::Query where
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
Load the value associated with the given key from the map.
pub fn try_get<KArg>(KArg) -> Result<V, ()> where
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
pub fn try_get<KArg>(KArg) -> Result<V, ()> where
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
Try to get the value for the given key from the map. Read more
pub fn take<KArg>(KArg) -> <G as StorageNMap<K, V>>::Query where
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
pub fn take<KArg>(KArg) -> <G as StorageNMap<K, V>>::Query where
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
Take the value under a key.
pub fn swap<KOther, KArg1, KArg2>(KArg1, KArg2) where
KArg1: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
KArg2: EncodeLikeTuple<<KOther as KeyGenerator>::KArg> + TupleToEncodedIter,
KOther: KeyGenerator,
pub fn swap<KOther, KArg1, KArg2>(KArg1, KArg2) where
KArg1: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
KArg2: EncodeLikeTuple<<KOther as KeyGenerator>::KArg> + TupleToEncodedIter,
KOther: KeyGenerator,
Swap the values of two keys.
pub fn insert<KArg, VArg>(KArg, VArg) where
VArg: EncodeLike<V>,
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
pub fn insert<KArg, VArg>(KArg, VArg) where
VArg: EncodeLike<V>,
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
Store a value to be associated with the given key from the map.
pub fn remove<KArg>(KArg) where
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
pub fn remove<KArg>(KArg) where
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
Remove the value under a key.
Remove all values under the partial prefix key.
pub fn iter_prefix_values<KP>(KP) -> PrefixIterator<V>ⓘNotable traits for PrefixIterator<T>
impl<T> Iterator for PrefixIterator<T> type Item = T;
where
K: HasKeyPrefix<KP>,
pub fn iter_prefix_values<KP>(KP) -> PrefixIterator<V>ⓘNotable traits for PrefixIterator<T>
impl<T> Iterator for PrefixIterator<T> type Item = T;
where
K: HasKeyPrefix<KP>,
Iterate over values that share the partial prefix key.
pub fn mutate<KArg, R, F>(KArg, F) -> R where
F: FnOnce(&mut <G as StorageNMap<K, V>>::Query) -> R,
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
pub fn mutate<KArg, R, F>(KArg, F) -> R where
F: FnOnce(&mut <G as StorageNMap<K, V>>::Query) -> R,
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
Mutate the value under a key.
pub fn try_mutate<KArg, R, E, F>(KArg, F) -> Result<R, E> where
F: FnOnce(&mut <G as StorageNMap<K, V>>::Query) -> Result<R, E>,
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
pub fn try_mutate<KArg, R, E, F>(KArg, F) -> Result<R, E> where
F: FnOnce(&mut <G as StorageNMap<K, V>>::Query) -> Result<R, E>,
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
Mutate the item, only if an Ok
value is returned.
pub fn mutate_exists<KArg, R, F>(KArg, F) -> R where
F: FnOnce(&mut Option<V>) -> R,
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
pub fn mutate_exists<KArg, R, F>(KArg, F) -> R where
F: FnOnce(&mut Option<V>) -> R,
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
Mutate the value under a key. Read more
pub fn try_mutate_exists<KArg, R, E, F>(KArg, F) -> Result<R, E> where
F: FnOnce(&mut Option<V>) -> Result<R, E>,
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
pub fn try_mutate_exists<KArg, R, E, F>(KArg, F) -> Result<R, E> where
F: FnOnce(&mut Option<V>) -> Result<R, E>,
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
Mutate the item, only if an Ok
value is returned. Deletes the item if mutated to a None
.
pub fn append<Item, EncodeLikeItem, KArg>(KArg, EncodeLikeItem) where
Item: Encode,
EncodeLikeItem: EncodeLike<Item>,
V: StorageAppend<Item>,
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
pub fn append<Item, EncodeLikeItem, KArg>(KArg, EncodeLikeItem) where
Item: Encode,
EncodeLikeItem: EncodeLike<Item>,
V: StorageAppend<Item>,
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
Append the given items to the value in the storage. Read more
pub fn migrate_keys<KArg>(KArg, <K as KeyGenerator>::HArg) -> Option<V> where
KArg: EncodeLikeTuple<<K as KeyGenerator>::KArg> + TupleToEncodedIter,
pub fn migrate_keys<KArg>(KArg, <K as KeyGenerator>::HArg) -> Option<V> where
KArg: EncodeLikeTuple<<K as KeyGenerator>::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
.
pub fn vzip(self) -> V