Return number of keys removed when calling storage_kill on child trie (#8166)

* Initial piping of returning amount of keys killed

* One more test for `None` limit

* forgot to update

* fix return value

* use version 3

* Update to return `KillOutcome`

* Update name to KillChildStorageResult
This commit is contained in:
Shawn Tabrizi
2021-02-22 11:24:12 -08:00
committed by GitHub
parent 74a1d69477
commit d25229bc89
10 changed files with 100 additions and 40 deletions
+3 -14
View File
@@ -24,14 +24,7 @@
use crate::sp_std::prelude::*;
use codec::{Codec, Encode, Decode};
pub use sp_core::storage::{ChildInfo, ChildType};
/// The outcome of calling [`kill_storage`].
pub enum KillOutcome {
/// No key remains in the child trie.
AllRemoved,
/// At least one key still resides in the child trie due to the supplied limit.
SomeRemaining,
}
pub use crate::sp_io::KillChildStorageResult;
/// Return the value of the item in storage under `key`, or `None` if there is no explicit entry.
pub fn get<T: Decode + Sized>(
@@ -177,16 +170,12 @@ pub fn exists(
pub fn kill_storage(
child_info: &ChildInfo,
limit: Option<u32>,
) -> KillOutcome {
let all_removed = match child_info.child_type() {
) -> KillChildStorageResult {
match child_info.child_type() {
ChildType::ParentKeyId => sp_io::default_child_storage::storage_kill(
child_info.storage_key(),
limit
),
};
match all_removed {
true => KillOutcome::AllRemoved,
false => KillOutcome::SomeRemaining,
}
}