From 824ccd60b85cd1219707a7792902af80ebe47a50 Mon Sep 17 00:00:00 2001 From: Christoph Otter Date: Tue, 4 Oct 2022 10:00:07 +0200 Subject: [PATCH 1/2] Remove iterator feature check for deque --- packages/storage-plus/src/deque.rs | 9 --------- packages/storage-plus/src/lib.rs | 1 - 2 files changed, 10 deletions(-) diff --git a/packages/storage-plus/src/deque.rs b/packages/storage-plus/src/deque.rs index 6c51440cb..9e0a4a1d6 100644 --- a/packages/storage-plus/src/deque.rs +++ b/packages/storage-plus/src/deque.rs @@ -196,7 +196,6 @@ fn calc_len(head: u32, tail: u32) -> u32 { tail.wrapping_sub(head) } -#[cfg(feature = "iterator")] impl<'a, T: Serialize + DeserializeOwned> VecDeque<'a, T> { pub fn iter(&self, storage: &'a dyn Storage) -> StdResult> { Ok(VecDequeIter { @@ -208,7 +207,6 @@ impl<'a, T: Serialize + DeserializeOwned> VecDeque<'a, T> { } } -#[cfg(feature = "iterator")] pub struct VecDequeIter<'a, T> where T: Serialize + DeserializeOwned, @@ -219,7 +217,6 @@ where end: u32, } -#[cfg(feature = "iterator")] impl<'a, T> Iterator for VecDequeIter<'a, T> where T: Serialize + DeserializeOwned, @@ -261,7 +258,6 @@ where } } -#[cfg(feature = "iterator")] impl<'a, T> DoubleEndedIterator for VecDequeIter<'a, T> where T: Serialize + DeserializeOwned, @@ -375,7 +371,6 @@ mod tests { } #[test] - #[cfg(feature = "iterator")] fn iterator() { let deque: VecDeque = VecDeque::new("test"); let mut store = MockStorage::new(); @@ -401,7 +396,6 @@ mod tests { } #[test] - #[cfg(feature = "iterator")] fn reverse_iterator() { let deque: VecDeque = VecDeque::new("test"); let mut store = MockStorage::new(); @@ -463,7 +457,6 @@ mod tests { } #[test] - #[cfg(feature = "iterator")] fn wrapping_iterator() { let deque: VecDeque = VecDeque::new("test"); let mut store = MockStorage::new(); @@ -512,7 +505,6 @@ mod tests { const DATA: VecDeque = VecDeque::new("data"); #[test] - #[cfg(feature = "iterator")] fn readme_works() -> StdResult<()> { let mut store = MockStorage::new(); @@ -564,7 +556,6 @@ mod tests { } #[test] - #[cfg(feature = "iterator")] fn iterator_errors_when_item_missing() { let mut store = MockStorage::new(); diff --git a/packages/storage-plus/src/lib.rs b/packages/storage-plus/src/lib.rs index 804b2db95..fe647eb70 100644 --- a/packages/storage-plus/src/lib.rs +++ b/packages/storage-plus/src/lib.rs @@ -34,7 +34,6 @@ mod snapshot; pub use bound::{Bound, Bounder, PrefixBound, RawBound}; pub use de::KeyDeserialize; pub use deque::VecDeque; -#[cfg(feature = "iterator")] pub use deque::VecDequeIter; pub use endian::Endian; #[cfg(feature = "iterator")] From 61faf19ead4914b36b8defbb3729f3efcb0fc5ea Mon Sep 17 00:00:00 2001 From: Christoph Otter Date: Tue, 4 Oct 2022 10:16:36 +0200 Subject: [PATCH 2/2] Rename Deque --- packages/storage-plus/src/deque.rs | 44 +++++++++++++++--------------- packages/storage-plus/src/lib.rs | 4 +-- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/packages/storage-plus/src/deque.rs b/packages/storage-plus/src/deque.rs index 9e0a4a1d6..01932a5ea 100644 --- a/packages/storage-plus/src/deque.rs +++ b/packages/storage-plus/src/deque.rs @@ -14,14 +14,14 @@ const HEAD_KEY: &[u8] = b"h"; /// /// It has a maximum capacity of `u32::MAX - 1`. Make sure to never exceed that number when using this type. /// If you do, the methods won't work as intended anymore. -pub struct VecDeque<'a, T> { +pub struct Deque<'a, T> { // prefix of the deque items namespace: &'a [u8], // see https://doc.rust-lang.org/std/marker/struct.PhantomData.html#unused-type-parameters for why this is needed item_type: PhantomData, } -impl<'a, T> VecDeque<'a, T> { +impl<'a, T> Deque<'a, T> { pub const fn new(prefix: &'a str) -> Self { Self { namespace: prefix.as_bytes(), @@ -30,7 +30,7 @@ impl<'a, T> VecDeque<'a, T> { } } -impl<'a, T: Serialize + DeserializeOwned> VecDeque<'a, T> { +impl<'a, T: Serialize + DeserializeOwned> Deque<'a, T> { /// Adds the given value to the end of the deque pub fn push_back(&self, storage: &mut dyn Storage, value: &T) -> StdResult<()> { // save value @@ -196,9 +196,9 @@ fn calc_len(head: u32, tail: u32) -> u32 { tail.wrapping_sub(head) } -impl<'a, T: Serialize + DeserializeOwned> VecDeque<'a, T> { - pub fn iter(&self, storage: &'a dyn Storage) -> StdResult> { - Ok(VecDequeIter { +impl<'a, T: Serialize + DeserializeOwned> Deque<'a, T> { + pub fn iter(&self, storage: &'a dyn Storage) -> StdResult> { + Ok(DequeIter { deque: self, storage, start: self.head(storage)?, @@ -207,17 +207,17 @@ impl<'a, T: Serialize + DeserializeOwned> VecDeque<'a, T> { } } -pub struct VecDequeIter<'a, T> +pub struct DequeIter<'a, T> where T: Serialize + DeserializeOwned, { - deque: &'a VecDeque<'a, T>, + deque: &'a Deque<'a, T>, storage: &'a dyn Storage, start: u32, end: u32, } -impl<'a, T> Iterator for VecDequeIter<'a, T> +impl<'a, T> Iterator for DequeIter<'a, T> where T: Serialize + DeserializeOwned, { @@ -258,7 +258,7 @@ where } } -impl<'a, T> DoubleEndedIterator for VecDequeIter<'a, T> +impl<'a, T> DoubleEndedIterator for DequeIter<'a, T> where T: Serialize + DeserializeOwned, { @@ -290,7 +290,7 @@ where } #[cfg(test)] mod tests { - use crate::deque::VecDeque; + use crate::deque::Deque; use cosmwasm_std::testing::MockStorage; use cosmwasm_std::{StdError, StdResult}; @@ -298,7 +298,7 @@ mod tests { #[test] fn push_and_pop() { - const PEOPLE: VecDeque = VecDeque::new("people"); + const PEOPLE: Deque = Deque::new("people"); let mut store = MockStorage::new(); // push some entries @@ -334,7 +334,7 @@ mod tests { #[test] fn length() { - let deque: VecDeque = VecDeque::new("test"); + let deque: Deque = Deque::new("test"); let mut store = MockStorage::new(); assert_eq!(deque.len(&store).unwrap(), 0); @@ -372,7 +372,7 @@ mod tests { #[test] fn iterator() { - let deque: VecDeque = VecDeque::new("test"); + let deque: Deque = Deque::new("test"); let mut store = MockStorage::new(); // push some items @@ -397,7 +397,7 @@ mod tests { #[test] fn reverse_iterator() { - let deque: VecDeque = VecDeque::new("test"); + let deque: Deque = Deque::new("test"); let mut store = MockStorage::new(); // push some items @@ -431,7 +431,7 @@ mod tests { #[test] fn wrapping() { - let deque: VecDeque = VecDeque::new("test"); + let deque: Deque = Deque::new("test"); let mut store = MockStorage::new(); // simulate deque that was pushed and popped `u32::MAX` times @@ -458,7 +458,7 @@ mod tests { #[test] fn wrapping_iterator() { - let deque: VecDeque = VecDeque::new("test"); + let deque: Deque = Deque::new("test"); let mut store = MockStorage::new(); deque.set_head(&mut store, u32::MAX); @@ -481,7 +481,7 @@ mod tests { #[test] fn front_back() { - let deque: VecDeque = VecDeque::new("test"); + let deque: Deque = Deque::new("test"); let mut store = MockStorage::new(); assert_eq!(deque.back(&store).unwrap(), None); @@ -502,7 +502,7 @@ mod tests { pub age: i32, } - const DATA: VecDeque = VecDeque::new("data"); + const DATA: Deque = Deque::new("data"); #[test] fn readme_works() -> StdResult<()> { @@ -559,7 +559,7 @@ mod tests { fn iterator_errors_when_item_missing() { let mut store = MockStorage::new(); - let deque = VecDeque::new("error_test"); + let deque = Deque::new("error_test"); deque.push_back(&mut store, &1u32).unwrap(); // manually remove it @@ -584,7 +584,7 @@ mod tests { fn get() { let mut store = MockStorage::new(); - let deque = VecDeque::new("test"); + let deque = Deque::new("test"); deque.push_back(&mut store, &1u32).unwrap(); deque.push_back(&mut store, &2).unwrap(); @@ -606,7 +606,7 @@ mod tests { ); // start fresh - let deque = VecDeque::new("test2"); + let deque = Deque::new("test2"); deque.push_back(&mut store, &0u32).unwrap(); deque.push_back(&mut store, &1).unwrap(); diff --git a/packages/storage-plus/src/lib.rs b/packages/storage-plus/src/lib.rs index fe647eb70..a91f096a4 100644 --- a/packages/storage-plus/src/lib.rs +++ b/packages/storage-plus/src/lib.rs @@ -33,8 +33,8 @@ mod snapshot; #[cfg(feature = "iterator")] pub use bound::{Bound, Bounder, PrefixBound, RawBound}; pub use de::KeyDeserialize; -pub use deque::VecDeque; -pub use deque::VecDequeIter; +pub use deque::Deque; +pub use deque::DequeIter; pub use endian::Endian; #[cfg(feature = "iterator")] pub use indexed_map::{IndexList, IndexedMap};