mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-07-24 18:15:48 +00:00
Add mutate_exists to StorageDoubleMap. (#6704)
This commit is contained in:
@@ -629,6 +629,23 @@ mod tests {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn double_map_mutate_exists_should_work() {
|
||||||
|
new_test_ext().execute_with(|| {
|
||||||
|
type DoubleMap = DataDM;
|
||||||
|
|
||||||
|
let (key1, key2) = (11, 13);
|
||||||
|
|
||||||
|
// mutated
|
||||||
|
DoubleMap::mutate_exists(key1, key2, |v| *v = Some(1));
|
||||||
|
assert_eq!(DoubleMap::get(&key1, key2), 1);
|
||||||
|
|
||||||
|
// removed if mutated to `None`
|
||||||
|
DoubleMap::mutate_exists(key1, key2, |v| *v = None);
|
||||||
|
assert!(!DoubleMap::contains_key(&key1, key2));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn double_map_try_mutate_exists_should_work() {
|
fn double_map_try_mutate_exists_should_work() {
|
||||||
new_test_ext().execute_with(|| {
|
new_test_ext().execute_with(|| {
|
||||||
|
|||||||
@@ -228,6 +228,15 @@ impl<K1, K2, V, G> storage::StorageDoubleMap<K1, K2, V> for G where
|
|||||||
Self::try_mutate(k1, k2, |v| Ok::<R, Never>(f(v))).expect("`Never` can not be constructed; qed")
|
Self::try_mutate(k1, k2, |v| Ok::<R, Never>(f(v))).expect("`Never` can not be constructed; qed")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn mutate_exists<KArg1, KArg2, R, F>(k1: KArg1, k2: KArg2, f: F) -> R
|
||||||
|
where
|
||||||
|
KArg1: EncodeLike<K1>,
|
||||||
|
KArg2: EncodeLike<K2>,
|
||||||
|
F: FnOnce(&mut Option<V>) -> R,
|
||||||
|
{
|
||||||
|
Self::try_mutate_exists(k1, k2, |v| Ok::<R, Never>(f(v))).expect("`Never` can not be constructed; qed")
|
||||||
|
}
|
||||||
|
|
||||||
fn try_mutate<KArg1, KArg2, R, E, F>(k1: KArg1, k2: KArg2, f: F) -> Result<R, E> where
|
fn try_mutate<KArg1, KArg2, R, E, F>(k1: KArg1, k2: KArg2, f: F) -> Result<R, E> where
|
||||||
KArg1: EncodeLike<K1>,
|
KArg1: EncodeLike<K1>,
|
||||||
KArg2: EncodeLike<K2>,
|
KArg2: EncodeLike<K2>,
|
||||||
|
|||||||
@@ -366,6 +366,13 @@ pub trait StorageDoubleMap<K1: FullEncode, K2: FullEncode, V: FullCodec> {
|
|||||||
KArg2: EncodeLike<K2>,
|
KArg2: EncodeLike<K2>,
|
||||||
F: FnOnce(&mut Self::Query) -> Result<R, E>;
|
F: FnOnce(&mut Self::Query) -> Result<R, E>;
|
||||||
|
|
||||||
|
/// Mutate the value under the given keys. Deletes the item if mutated to a `None`.
|
||||||
|
fn mutate_exists<KArg1, KArg2, R, F>(k1: KArg1, k2: KArg2, f: F) -> R
|
||||||
|
where
|
||||||
|
KArg1: EncodeLike<K1>,
|
||||||
|
KArg2: EncodeLike<K2>,
|
||||||
|
F: FnOnce(&mut Option<V>) -> R;
|
||||||
|
|
||||||
/// Mutate the item, only if an `Ok` value is returned. Deletes the item if mutated to a `None`.
|
/// Mutate the item, only if an `Ok` value is returned. Deletes the item if mutated to a `None`.
|
||||||
fn try_mutate_exists<KArg1, KArg2, R, E, F>(k1: KArg1, k2: KArg2, f: F) -> Result<R, E>
|
fn try_mutate_exists<KArg1, KArg2, R, E, F>(k1: KArg1, k2: KArg2, f: F) -> Result<R, E>
|
||||||
where
|
where
|
||||||
|
|||||||
Reference in New Issue
Block a user