From 01c76e5715abcc755a5499ee521b70a768fe7a5c Mon Sep 17 00:00:00 2001 From: Mauro Lacy Date: Thu, 22 Jul 2021 12:13:16 +0200 Subject: [PATCH 1/4] Replace pks() by by prefix.keys(), and remove it --- packages/storage-plus/src/indexed_map.rs | 9 +---- packages/storage-plus/src/indexed_snapshot.rs | 9 +---- packages/storage-plus/src/indexes.rs | 37 +++++-------------- packages/storage-plus/src/prefix.rs | 5 +-- 4 files changed, 14 insertions(+), 46 deletions(-) diff --git a/packages/storage-plus/src/indexed_map.rs b/packages/storage-plus/src/indexed_map.rs index da91ef60f..f0d4ac77a 100644 --- a/packages/storage-plus/src/indexed_map.rs +++ b/packages/storage-plus/src/indexed_map.rs @@ -603,13 +603,8 @@ mod test { -> usize { map.idx .name - .pks( - store, - name.as_bytes().to_vec(), - None, - None, - Order::Ascending, - ) + .prefix(name.as_bytes().to_vec()) + .keys(store, None, None, Order::Ascending) .count() }; diff --git a/packages/storage-plus/src/indexed_snapshot.rs b/packages/storage-plus/src/indexed_snapshot.rs index f25274a4a..74188518f 100644 --- a/packages/storage-plus/src/indexed_snapshot.rs +++ b/packages/storage-plus/src/indexed_snapshot.rs @@ -603,13 +603,8 @@ mod test { -> usize { map.idx .name - .pks( - store, - name.as_bytes().to_vec(), - None, - None, - Order::Ascending, - ) + .prefix(name.as_bytes().to_vec()) + .keys(store, None, None, Order::Ascending) .count() }; diff --git a/packages/storage-plus/src/indexes.rs b/packages/storage-plus/src/indexes.rs index 7febe4972..13ff3ad88 100644 --- a/packages/storage-plus/src/indexes.rs +++ b/packages/storage-plus/src/indexes.rs @@ -142,43 +142,24 @@ where k.joined_key() } - // FIXME?: Move to Prefix for ergonomics - pub fn pks<'c>( - &self, - store: &'c dyn Storage, - p: K::Prefix, - min: Option, - max: Option, - order: Order, - ) -> Box>> + 'c> - where - T: 'c, - { - let prefix = self.prefix(p); - let mapped = prefix.range(store, min, max, order).map(|res| { - let t = res?; - Ok(t.0) - }); - Box::new(mapped) - } - #[cfg(test)] pub fn count(&self, store: &dyn Storage, p: K::Prefix) -> usize { - self.pks(store, p, None, None, Order::Ascending).count() + let prefix = self.prefix(p); + prefix.keys(store, None, None, Order::Ascending).count() } #[cfg(test)] pub fn all_pks(&self, store: &dyn Storage, p: K::Prefix) -> Vec> { - self.pks(store, p, None, None, Order::Ascending) - .collect::>>>() - .unwrap() + let prefix = self.prefix(p); + prefix + .keys(store, None, None, Order::Ascending) + .collect::>>() } #[cfg(test)] - pub fn all_items(&self, store: &dyn Storage, prefix: K::Prefix) -> StdResult>> { - self.prefix(prefix) - .range(store, None, None, Order::Ascending) - .collect() + pub fn all_items(&self, store: &dyn Storage, p: K::Prefix) -> StdResult>> { + let prefix = self.prefix(p); + prefix.range(store, None, None, Order::Ascending).collect() } } diff --git a/packages/storage-plus/src/prefix.rs b/packages/storage-plus/src/prefix.rs index 3bc16517c..e505d4760 100644 --- a/packages/storage-plus/src/prefix.rs +++ b/packages/storage-plus/src/prefix.rs @@ -117,10 +117,7 @@ where min: Option, max: Option, order: Order, - ) -> Box> + 'a> - where - T: 'a, - { + ) -> Box> + 'a> { let mapped = range_with_prefix(store, &self.storage_prefix, min, max, order).map(|(k, _)| k); Box::new(mapped) From 182e15cff5dc0d2ac0ddd96ebdec44f6beb73634 Mon Sep 17 00:00:00 2001 From: Mauro Lacy Date: Thu, 22 Jul 2021 12:17:09 +0200 Subject: [PATCH 2/4] Replace pks() usage in contracts --- contracts/cw721-base/src/contract.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/contracts/cw721-base/src/contract.rs b/contracts/cw721-base/src/contract.rs index 0d4b45982..a259fe85f 100644 --- a/contracts/cw721-base/src/contract.rs +++ b/contracts/cw721-base/src/contract.rs @@ -510,13 +510,13 @@ fn query_tokens( let start = start_after.map(Bound::exclusive); let owner_addr = deps.api.addr_validate(&owner)?; - let res: Result, _> = tokens() + let pks: Vec<_> = tokens() .idx .owner - .pks(deps.storage, owner_addr, start, None, Order::Ascending) + .prefix(owner_addr) + .keys(deps.storage, start, None, Order::Ascending) .take(limit) .collect(); - let pks = res?; let res: Result, _> = pks.iter().map(|v| String::from_utf8(v.to_vec())).collect(); let tokens = res.map_err(StdError::invalid_utf8)?; From acd2c93f708ee4a618b1ac628e501189df4759de Mon Sep 17 00:00:00 2001 From: Mauro Lacy Date: Thu, 22 Jul 2021 12:28:13 +0200 Subject: [PATCH 3/4] Update IndexedMap docs --- packages/storage-plus/README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/storage-plus/README.md b/packages/storage-plus/README.md index 3b03e78e9..421f14d59 100644 --- a/packages/storage-plus/README.md +++ b/packages/storage-plus/README.md @@ -573,20 +573,19 @@ Notice this uses `prefix()`, explained above in the `Map` section. Now `tokens` contains `(token_id, TokenInfo)` pairs for the given `owner`. The pk values are `Vec`, as this is a limitation of the current implementation. -Another example that is slightly similar, but returning only the `token_id`s, using the `pks()` method: +Another example that is similar, but returning only the `token_id`s, using the `keys()` method: ```rust - let res: Result, _> = tokens() + let pks: Vec<_> = tokens() .idx .owner - .pks( + .prefix(owner_addr) + .keys( deps.storage, - owner_addr, start, None, Order::Ascending, ) .take(limit) .collect(); - let pks = res?; ``` Now `pks` contains `token_id` values (as `Vec`s) for the given `owner`. From 754c99ff7a8d594b725fc605469d4037a819879b Mon Sep 17 00:00:00 2001 From: Mauro Lacy Date: Thu, 22 Jul 2021 16:26:36 +0200 Subject: [PATCH 4/4] Add keys() shortcut for simple keys to MultiIndex / UniqueIndex --- packages/storage-plus/src/indexes.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/packages/storage-plus/src/indexes.rs b/packages/storage-plus/src/indexes.rs index 13ff3ad88..2725b2442 100644 --- a/packages/storage-plus/src/indexes.rs +++ b/packages/storage-plus/src/indexes.rs @@ -185,6 +185,17 @@ where self.sub_prefix(K::SubPrefix::new()) .range(store, min, max, order) } + + pub fn keys<'c>( + &'c self, + store: &'c dyn Storage, + min: Option, + max: Option, + order: Order, + ) -> Box> + 'c> { + self.sub_prefix(K::SubPrefix::new()) + .keys(store, min, max, order) + } } #[derive(Deserialize, Serialize)] @@ -300,4 +311,15 @@ where self.sub_prefix(K::SubPrefix::new()) .range(store, min, max, order) } + + pub fn keys<'c>( + &self, + store: &'c dyn Storage, + min: Option, + max: Option, + order: Order, + ) -> Box> + 'c> { + self.sub_prefix(K::SubPrefix::new()) + .keys(store, min, max, order) + } }