diff --git a/near-sdk/src/store/free_list/iter.rs b/near-sdk/src/store/free_list/iter.rs index c8208bfa8..16003c275 100644 --- a/near-sdk/src/store/free_list/iter.rs +++ b/near-sdk/src/store/free_list/iter.rs @@ -89,6 +89,18 @@ where } } +impl<'a, T> Clone for Iter<'a, T> +where + T: BorshDeserialize + BorshSerialize + Clone, +{ + fn clone(&self) -> Self { + Self { + values: self.values.clone(), + elements_left: self.elements_left, + } + } +} + impl<'a, T> ExactSizeIterator for Iter<'a, T> where T: BorshSerialize + BorshDeserialize {} impl<'a, T> FusedIterator for Iter<'a, T> where T: BorshSerialize + BorshDeserialize {} diff --git a/near-sdk/src/store/iterable_map/iter.rs b/near-sdk/src/store/iterable_map/iter.rs index 549e8df2b..6e3f45d11 100644 --- a/near-sdk/src/store/iterable_map/iter.rs +++ b/near-sdk/src/store/iterable_map/iter.rs @@ -88,6 +88,20 @@ where } } +impl<'a, K, V, H> Clone for Iter<'a, K, V, H> +where + K: BorshSerialize + Ord + BorshDeserialize + Clone, + V: BorshSerialize + BorshDeserialize, + H: ToKey, +{ + fn clone(&self) -> Self { + Self { + keys: self.keys.clone(), + values: self.values, + } + } +} + impl<'a, K, V, H> ExactSizeIterator for Iter<'a, K, V, H> where K: BorshSerialize + Ord + BorshDeserialize + Clone, diff --git a/near-sdk/src/store/iterable_set/iter.rs b/near-sdk/src/store/iterable_set/iter.rs index 6e551570b..6985bd892 100644 --- a/near-sdk/src/store/iterable_set/iter.rs +++ b/near-sdk/src/store/iterable_set/iter.rs @@ -66,6 +66,17 @@ where } } +impl<'a, T> Clone for Iter<'a, T> +where + T: BorshSerialize + Ord + BorshDeserialize, +{ + fn clone(&self) -> Self { + Self { + elements: self.elements.clone(), + } + } +} + impl<'a, T> ExactSizeIterator for Iter<'a, T> where T: BorshSerialize + Ord + BorshDeserialize {} impl<'a, T> FusedIterator for Iter<'a, T> where T: BorshSerialize + Ord + BorshDeserialize {} diff --git a/near-sdk/src/store/tree_map/iter.rs b/near-sdk/src/store/tree_map/iter.rs index 05778b82a..c4c4bdcd7 100644 --- a/near-sdk/src/store/tree_map/iter.rs +++ b/near-sdk/src/store/tree_map/iter.rs @@ -89,6 +89,20 @@ where } } +impl<'a, K, V, H> Clone for Iter<'a, K, V, H> +where + K: BorshSerialize + Ord + BorshDeserialize + Clone, + V: BorshSerialize + BorshDeserialize, + H: ToKey, +{ + fn clone(&self) -> Self { + Self { + keys: self.keys.clone(), + values: self.values, + } + } +} + impl<'a, K, V, H> ExactSizeIterator for Iter<'a, K, V, H> where K: BorshSerialize + Ord + BorshDeserialize + Clone, diff --git a/near-sdk/src/store/unordered_map/iter.rs b/near-sdk/src/store/unordered_map/iter.rs index 42199ea5d..c607612b6 100644 --- a/near-sdk/src/store/unordered_map/iter.rs +++ b/near-sdk/src/store/unordered_map/iter.rs @@ -87,6 +87,20 @@ where } } +impl<'a, K, V, H> Clone for Iter<'a, K, V, H> +where + K: BorshSerialize + Ord + BorshDeserialize + Clone, + V: BorshSerialize + BorshDeserialize, + H: ToKey, +{ + fn clone(&self) -> Self { + Self { + keys: self.keys.clone(), + values: self.values, + } + } +} + impl<'a, K, V, H> ExactSizeIterator for Iter<'a, K, V, H> where K: BorshSerialize + Ord + BorshDeserialize + Clone, @@ -262,6 +276,17 @@ where } } +impl<'a, K> Clone for Keys<'a, K> +where + K: BorshSerialize + BorshDeserialize + Clone, +{ + fn clone(&self) -> Self { + Self { + inner: self.inner.clone(), + } + } +} + impl<'a, K> ExactSizeIterator for Keys<'a, K> where K: BorshSerialize + BorshDeserialize {} impl<'a, K> FusedIterator for Keys<'a, K> where K: BorshSerialize + BorshDeserialize {} @@ -322,6 +347,19 @@ where } } +impl<'a, K, V, H> Clone for Values<'a, K, V, H> +where + K: BorshSerialize + Ord + BorshDeserialize + Clone, + V: BorshSerialize + BorshDeserialize + Clone, + H: ToKey, +{ + fn clone(&self) -> Self { + Self { + inner: self.inner.clone(), + } + } +} + impl<'a, K, V, H> ExactSizeIterator for Values<'a, K, V, H> where K: BorshSerialize + Ord + BorshDeserialize + Clone, diff --git a/near-sdk/src/store/unordered_set/iter.rs b/near-sdk/src/store/unordered_set/iter.rs index 321df6d96..abae3b592 100644 --- a/near-sdk/src/store/unordered_set/iter.rs +++ b/near-sdk/src/store/unordered_set/iter.rs @@ -66,6 +66,17 @@ where } } +impl<'a, T> Clone for Iter<'a, T> +where + T: BorshSerialize + Ord + BorshDeserialize + Clone, +{ + fn clone(&self) -> Self { + Self { + elements: self.elements.clone(), + } + } +} + impl<'a, T> ExactSizeIterator for Iter<'a, T> where T: BorshSerialize + Ord + BorshDeserialize {} impl<'a, T> FusedIterator for Iter<'a, T> where T: BorshSerialize + Ord + BorshDeserialize {} diff --git a/near-sdk/src/store/vec/iter.rs b/near-sdk/src/store/vec/iter.rs index ba39a1de2..2de1cad00 100644 --- a/near-sdk/src/store/vec/iter.rs +++ b/near-sdk/src/store/vec/iter.rs @@ -55,6 +55,18 @@ where } } +impl<'a, T> Clone for Iter<'a, T> +where + T: BorshSerialize + BorshDeserialize +{ + fn clone(&self) -> Self { + Self { + vec: self.vec, + range: self.range.clone(), + } + } +} + impl<'a, T> ExactSizeIterator for Iter<'a, T> where T: BorshSerialize + BorshDeserialize {} impl<'a, T> FusedIterator for Iter<'a, T> where T: BorshSerialize + BorshDeserialize {}