Struct fabric_support::storage::types::StorageMap[][src]

pub struct StorageMap<Prefix, Hasher, Key, Value, QueryKind = OptionQuery, OnEmpty = GetDefault>(_);

A type that allow to store value for given key. Allowing to insert/remove/iterate on values.

Each value is stored at:

Twox128(Prefix::noble_prefix())
	++ Twox128(Prefix::STORAGE_PREFIX)
	++ Hasher1(encode(key))

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. Otherwise, other values in storage can be compromised.

Implementations

impl<Prefix, Hasher, Key, Value, QueryKind, OnEmpty> StorageMap<Prefix, Hasher, Key, Value, QueryKind, OnEmpty> where
    Prefix: StorageInstance,
    Hasher: StorageHasher,
    Key: FullCodec,
    Value: FullCodec,
    QueryKind: QueryKindTrait<Value, OnEmpty>,
    OnEmpty: Get<QueryKind::Query> + 'static, 
[src]

pub fn hashed_key_for<KeyArg: EncodeLike<Key>>(key: KeyArg) -> Vec<u8>

Notable traits for Vec<u8, A>

impl<A> Write for Vec<u8, A> where
    A: Allocator
[src]

Get the storage key used to fetch a value corresponding to a specific key.

pub fn contains_key<KeyArg: EncodeLike<Key>>(key: KeyArg) -> bool[src]

Does the value (explicitly) exist in storage?

pub fn get<KeyArg: EncodeLike<Key>>(key: KeyArg) -> QueryKind::Query[src]

Load the value associated with the given key from the map.

pub fn try_get<KeyArg: EncodeLike<Key>>(key: KeyArg) -> Result<Value, ()>[src]

Try to get the value for the given key from the map.

Returns Ok if it exists, Err if not.

pub fn swap<KeyArg1: EncodeLike<Key>, KeyArg2: EncodeLike<Key>>(
    key1: KeyArg1,
    key2: KeyArg2
)
[src]

Swap the values of two keys.

pub fn insert<KeyArg: EncodeLike<Key>, ValArg: EncodeLike<Value>>(
    key: KeyArg,
    val: ValArg
)
[src]

Store a value to be associated with the given key from the map.

pub fn remove<KeyArg: EncodeLike<Key>>(key: KeyArg)[src]

Remove the value under a key.

pub fn mutate<KeyArg: EncodeLike<Key>, R, F: FnOnce(&mut QueryKind::Query) -> R>(
    key: KeyArg,
    f: F
) -> R
[src]

Mutate the value under a key.

pub fn try_mutate<KeyArg, R, E, F>(key: KeyArg, f: F) -> Result<R, E> where
    KeyArg: EncodeLike<Key>,
    F: FnOnce(&mut QueryKind::Query) -> Result<R, E>, 
[src]

Mutate the item, only if an Ok value is returned.

pub fn mutate_exists<KeyArg: EncodeLike<Key>, R, F: FnOnce(&mut Option<Value>) -> R>(
    key: KeyArg,
    f: F
) -> R
[src]

Mutate the value under a key. Deletes the item if mutated to a None.

pub fn try_mutate_exists<KeyArg, R, E, F>(key: KeyArg, f: F) -> Result<R, E> where
    KeyArg: EncodeLike<Key>,
    F: FnOnce(&mut Option<Value>) -> Result<R, E>, 
[src]

Mutate the item, only if an Ok value is returned. Deletes the item if mutated to a None.

pub fn take<KeyArg: EncodeLike<Key>>(key: KeyArg) -> QueryKind::Query[src]

Take the value under a key.

pub fn append<Item, EncodeLikeItem, EncodeLikeKey>(
    key: EncodeLikeKey,
    item: EncodeLikeItem
) where
    EncodeLikeKey: EncodeLike<Key>,
    Item: Encode,
    EncodeLikeItem: EncodeLike<Item>,
    Value: StorageAppend<Item>, 
[src]

Append the given items to the value in the storage.

Value is required to implement codec::EncodeAppend.

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<KeyArg: EncodeLike<Key>>(key: KeyArg) -> Option<usize> where
    Value: StorageDecodeLength
[src]

Read the length of the storage value without decoding the entire value under the given key.

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_key<OldHasher: StorageHasher, KeyArg: EncodeLike<Key>>(
    key: KeyArg
) -> Option<Value>
[src]

Migrate an item with the given key from a defunct OldHasher to the current hasher.

If the key doesn’t exist, then it’s a no-op. If it does, then it returns its value.

pub fn remove_all()[src]

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;
[src]

Iter over all value of the storage.

NOTE: If a value failed to decode becaues storage is corrupted then it is skipped.

pub fn translate_values<OldValue: Decode, F: Fn(OldValue) -> Option<Value>>(
    f: F
)
[src]

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, Hasher, Key, Value, QueryKind, OnEmpty> StorageMap<Prefix, Hasher, Key, Value, QueryKind, OnEmpty> where
    Prefix: StorageInstance,
    Hasher: StorageHasher + ReversibleStorageHasher,
    Key: FullCodec,
    Value: FullCodec,
    QueryKind: QueryKindTrait<Value, OnEmpty>,
    OnEmpty: Get<QueryKind::Query> + 'static, 
[src]

pub fn iter() -> PrefixIterator<(Key, Value)>

Notable traits for PrefixIterator<T>

impl<T> Iterator for PrefixIterator<T> type Item = T;
[src]

Enumerate all elements in the map in no particular order.

If you alter the map while doing this, you’ll get undefined results.

pub fn drain() -> PrefixIterator<(Key, Value)>

Notable traits for PrefixIterator<T>

impl<T> Iterator for PrefixIterator<T> type Item = T;
[src]

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.

pub fn translate<O: Decode, F: Fn(Key, O) -> Option<Value>>(f: F)[src]

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, Hasher, Key, Value, QueryKind, OnEmpty> StorageMapMetadata for StorageMap<Prefix, Hasher, Key, Value, QueryKind, OnEmpty> where
    Prefix: StorageInstance,
    Hasher: StorageHasher,
    Key: FullCodec,
    Value: FullCodec,
    QueryKind: QueryKindTrait<Value, OnEmpty>,
    OnEmpty: Get<QueryKind::Query> + 'static, 
[src]

impl<Prefix, Hasher, Key, Value, QueryKind, OnEmpty> StoragePrefixedMap<Value> for StorageMap<Prefix, Hasher, Key, Value, QueryKind, OnEmpty> where
    Prefix: StorageInstance,
    Hasher: StorageHasher,
    Key: FullCodec,
    Value: FullCodec,
    QueryKind: QueryKindTrait<Value, OnEmpty>,
    OnEmpty: Get<QueryKind::Query> + 'static, 
[src]

Auto Trait Implementations

impl<Prefix, Hasher, Key, Value, QueryKind, OnEmpty> RefUnwindSafe for StorageMap<Prefix, Hasher, Key, Value, QueryKind, OnEmpty> where
    Hasher: RefUnwindSafe,
    Key: RefUnwindSafe,
    OnEmpty: RefUnwindSafe,
    Prefix: RefUnwindSafe,
    QueryKind: RefUnwindSafe,
    Value: RefUnwindSafe

impl<Prefix, Hasher, Key, Value, QueryKind, OnEmpty> Send for StorageMap<Prefix, Hasher, Key, Value, QueryKind, OnEmpty> where
    Hasher: Send,
    Key: Send,
    OnEmpty: Send,
    Prefix: Send,
    QueryKind: Send,
    Value: Send

impl<Prefix, Hasher, Key, Value, QueryKind, OnEmpty> Sync for StorageMap<Prefix, Hasher, Key, Value, QueryKind, OnEmpty> where
    Hasher: Sync,
    Key: Sync,
    OnEmpty: Sync,
    Prefix: Sync,
    QueryKind: Sync,
    Value: Sync

impl<Prefix, Hasher, Key, Value, QueryKind, OnEmpty> Unpin for StorageMap<Prefix, Hasher, Key, Value, QueryKind, OnEmpty> where
    Hasher: Unpin,
    Key: Unpin,
    OnEmpty: Unpin,
    Prefix: Unpin,
    QueryKind: Unpin,
    Value: Unpin

impl<Prefix, Hasher, Key, Value, QueryKind, OnEmpty> UnwindSafe for StorageMap<Prefix, Hasher, Key, Value, QueryKind, OnEmpty> where
    Hasher: UnwindSafe,
    Key: UnwindSafe,
    OnEmpty: UnwindSafe,
    Prefix: UnwindSafe,
    QueryKind: UnwindSafe,
    Value: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> CheckedConversion for T[src]

impl<T> Downcast for T where
    T: Any

impl<T> DowncastSync for T where
    T: Any + Send + Sync

impl<T> From<T> for T[src]

impl<T> Instrument for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> IsType<T> for T[src]

impl<T, Outer> IsWrappedBy<Outer> for T where
    T: From<Outer>,
    Outer: AsRef<T> + AsMut<T> + From<T>, 
[src]

pub fn from_ref(outer: &Outer) -> &T[src]

Get a reference to the inner from the outer.

pub fn from_mut(outer: &mut Outer) -> &mut T[src]

Get a mutable reference to the inner from the outer.

impl<T> MaybeRefUnwindSafe for T where
    T: RefUnwindSafe

impl<T> Same<T> for T

type Output = T

Should always be Self

impl<T> SaturatedConversion for T[src]

impl<K, V, G> StorageMap<K, V> for G where
    K: FullEncode,
    V: FullCodec,
    G: StorageMap<K, V>, 
[src]

type Query = <G as StorageMap<K, V>>::Query

The type that get/take return.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<S, T> UncheckedInto<T> for S where
    T: UncheckedFrom<S>, 
[src]

impl<T, S> UniqueSaturatedInto<T> for S where
    T: Bounded,
    S: TryInto<T>, 
[src]

impl<V, T> VZip<V> for T where
    V: MultiLane<T>,