Skip to content

Commit a11e27c

Browse files
committed
Rename KV to Pair
1 parent ac9a1e2 commit a11e27c

13 files changed

+68
-48
lines changed

CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@ and this project adheres to
9797
performance. Also, remove `memory_limit` from `InstanceOptions`, and define it
9898
instead at `Cache` level (same memory limit for all cached instances).
9999
([#697])
100+
- cosmwasm-std: Rename type `KV` to `Pair` in order to comply to naming
101+
convention as enforced by clippy rule `upper_case_acronyms` from Rust 1.51.0
102+
on.
100103
- cosmwasm-vm: Bump required marker export `cosmwasm_vm_version_4` to
101104
`interface_version_5`.
102105
- cosmwasm-vm: Rename trait `Api` to `BackendApi` to better express this is the

MIGRATING.md

+10
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,16 @@ major releases of `cosmwasm`. Note that you can also view the
212212
}
213213
```
214214

215+
- Use type `Pair` instead of `KV`
216+
217+
```rust
218+
// before
219+
use cosmwasm_std::KV;
220+
221+
// after
222+
use cosmwasm_std::Pair;
223+
```
224+
215225
- If necessary, add a wildcard arm to the `match` of now non-exhaustive message
216226
types `BankMsg`, `BankQuery`, `WasmMsg` and `WasmQuery`.
217227

packages/std/src/imports.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use crate::serde::from_slice;
1313
use crate::traits::{Api, Querier, QuerierResult, Storage};
1414
#[cfg(feature = "iterator")]
1515
use crate::{
16-
iterator::{Order, KV},
16+
iterator::{Order, Pair},
1717
memory::get_optional_region_address,
1818
};
1919

@@ -107,7 +107,7 @@ impl Storage for ExternalStorage {
107107
start: Option<&[u8]>,
108108
end: Option<&[u8]>,
109109
order: Order,
110-
) -> Box<dyn Iterator<Item = KV>> {
110+
) -> Box<dyn Iterator<Item = Pair>> {
111111
// There is lots of gotchas on turning options into regions for FFI, thus this design
112112
// See: https://github.com/CosmWasm/cosmwasm/pull/509
113113
let start_region = start.map(build_region);
@@ -129,7 +129,7 @@ struct ExternalIterator {
129129

130130
#[cfg(feature = "iterator")]
131131
impl Iterator for ExternalIterator {
132-
type Item = KV;
132+
type Item = Pair;
133133

134134
fn next(&mut self) -> Option<Self::Item> {
135135
let next_result = unsafe { db_next(self.iterator_id) };

packages/std/src/iterator.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
use crate::errors::StdError;
22
use std::convert::TryFrom;
33

4+
/// A Key-Value pair, returned from our iterators
5+
pub type Pair<V = Vec<u8>> = (Vec<u8>, V);
6+
47
/// KV is a Key-Value pair, returned from our iterators
5-
pub type KV<T = Vec<u8>> = (Vec<u8>, T);
8+
#[deprecated(since = "0.14.0", note = "Renamed to Pair")]
9+
#[allow(clippy::upper_case_acronyms)]
10+
pub type KV<V = Vec<u8>> = Pair<V>;
611

712
#[derive(Copy, Clone)]
813
// We assign these to integers to provide a stable API for passing over FFI (to wasm and Go)

packages/std/src/lib.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ pub use crate::ibc::{
3434
PortIdResponse,
3535
};
3636
#[cfg(feature = "iterator")]
37-
pub use crate::iterator::{Order, KV};
37+
#[allow(deprecated)]
38+
pub use crate::iterator::{Order, Pair, KV};
3839
pub use crate::math::{Decimal, Uint128};
3940
pub use crate::query::{
4041
AllBalanceResponse, AllDelegationsResponse, BalanceResponse, BankQuery, BondedDenomResponse,

packages/std/src/storage.rs

+15-15
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use std::iter;
66
use std::ops::{Bound, RangeBounds};
77

88
#[cfg(feature = "iterator")]
9-
use crate::iterator::{Order, KV};
9+
use crate::iterator::{Order, Pair};
1010
use crate::traits::Storage;
1111

1212
#[derive(Default)]
@@ -45,7 +45,7 @@ impl Storage for MemoryStorage {
4545
start: Option<&[u8]>,
4646
end: Option<&[u8]>,
4747
order: Order,
48-
) -> Box<dyn Iterator<Item = KV> + 'a> {
48+
) -> Box<dyn Iterator<Item = Pair> + 'a> {
4949
let bounds = range_bounds(start, end);
5050

5151
// BTreeMap.range panics if range is start > end.
@@ -101,7 +101,7 @@ fn range_bounds(start: Option<&[u8]>, end: Option<&[u8]>) -> impl RangeBounds<Ve
101101
type BTreeMapPairRef<'a, T = Vec<u8>> = (&'a Vec<u8>, &'a T);
102102

103103
#[cfg(feature = "iterator")]
104-
fn clone_item<T: Clone>(item_ref: BTreeMapPairRef<T>) -> KV<T> {
104+
fn clone_item<T: Clone>(item_ref: BTreeMapPairRef<T>) -> Pair<T> {
105105
let (key, value) = item_ref;
106106
(key.clone(), value.clone())
107107
}
@@ -160,7 +160,7 @@ mod tests {
160160
// unbounded
161161
{
162162
let iter = store.range(None, None, Order::Ascending);
163-
let elements: Vec<KV> = iter.collect();
163+
let elements: Vec<Pair> = iter.collect();
164164
assert_eq!(
165165
elements,
166166
vec![
@@ -174,7 +174,7 @@ mod tests {
174174
// unbounded (descending)
175175
{
176176
let iter = store.range(None, None, Order::Descending);
177-
let elements: Vec<KV> = iter.collect();
177+
let elements: Vec<Pair> = iter.collect();
178178
assert_eq!(
179179
elements,
180180
vec![
@@ -188,14 +188,14 @@ mod tests {
188188
// bounded
189189
{
190190
let iter = store.range(Some(b"f"), Some(b"n"), Order::Ascending);
191-
let elements: Vec<KV> = iter.collect();
191+
let elements: Vec<Pair> = iter.collect();
192192
assert_eq!(elements, vec![(b"foo".to_vec(), b"bar".to_vec())]);
193193
}
194194

195195
// bounded (descending)
196196
{
197197
let iter = store.range(Some(b"air"), Some(b"loop"), Order::Descending);
198-
let elements: Vec<KV> = iter.collect();
198+
let elements: Vec<Pair> = iter.collect();
199199
assert_eq!(
200200
elements,
201201
vec![
@@ -208,35 +208,35 @@ mod tests {
208208
// bounded empty [a, a)
209209
{
210210
let iter = store.range(Some(b"foo"), Some(b"foo"), Order::Ascending);
211-
let elements: Vec<KV> = iter.collect();
211+
let elements: Vec<Pair> = iter.collect();
212212
assert_eq!(elements, vec![]);
213213
}
214214

215215
// bounded empty [a, a) (descending)
216216
{
217217
let iter = store.range(Some(b"foo"), Some(b"foo"), Order::Descending);
218-
let elements: Vec<KV> = iter.collect();
218+
let elements: Vec<Pair> = iter.collect();
219219
assert_eq!(elements, vec![]);
220220
}
221221

222222
// bounded empty [a, b) with b < a
223223
{
224224
let iter = store.range(Some(b"z"), Some(b"a"), Order::Ascending);
225-
let elements: Vec<KV> = iter.collect();
225+
let elements: Vec<Pair> = iter.collect();
226226
assert_eq!(elements, vec![]);
227227
}
228228

229229
// bounded empty [a, b) with b < a (descending)
230230
{
231231
let iter = store.range(Some(b"z"), Some(b"a"), Order::Descending);
232-
let elements: Vec<KV> = iter.collect();
232+
let elements: Vec<Pair> = iter.collect();
233233
assert_eq!(elements, vec![]);
234234
}
235235

236236
// right unbounded
237237
{
238238
let iter = store.range(Some(b"f"), None, Order::Ascending);
239-
let elements: Vec<KV> = iter.collect();
239+
let elements: Vec<Pair> = iter.collect();
240240
assert_eq!(
241241
elements,
242242
vec![
@@ -249,7 +249,7 @@ mod tests {
249249
// right unbounded (descending)
250250
{
251251
let iter = store.range(Some(b"f"), None, Order::Descending);
252-
let elements: Vec<KV> = iter.collect();
252+
let elements: Vec<Pair> = iter.collect();
253253
assert_eq!(
254254
elements,
255255
vec![
@@ -262,14 +262,14 @@ mod tests {
262262
// left unbounded
263263
{
264264
let iter = store.range(None, Some(b"f"), Order::Ascending);
265-
let elements: Vec<KV> = iter.collect();
265+
let elements: Vec<Pair> = iter.collect();
266266
assert_eq!(elements, vec![(b"ant".to_vec(), b"hill".to_vec()),]);
267267
}
268268

269269
// left unbounded (descending)
270270
{
271271
let iter = store.range(None, Some(b"no"), Order::Descending);
272-
let elements: Vec<KV> = iter.collect();
272+
let elements: Vec<Pair> = iter.collect();
273273
assert_eq!(
274274
elements,
275275
vec![

packages/std/src/traits.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use crate::binary::Binary;
66
use crate::coins::Coin;
77
use crate::errors::{RecoverPubkeyError, StdError, StdResult, VerificationError};
88
#[cfg(feature = "iterator")]
9-
use crate::iterator::{Order, KV};
9+
use crate::iterator::{Order, Pair};
1010
use crate::query::{
1111
AllBalanceResponse, BalanceResponse, BankQuery, CustomQuery, QueryRequest, WasmQuery,
1212
};
@@ -39,7 +39,7 @@ pub trait Storage {
3939
start: Option<&[u8]>,
4040
end: Option<&[u8]>,
4141
order: Order,
42-
) -> Box<dyn Iterator<Item = KV> + 'a>;
42+
) -> Box<dyn Iterator<Item = Pair> + 'a>;
4343

4444
fn set(&mut self, key: &[u8], value: &[u8]);
4545
/// Removes a database entry at `key`.

packages/storage/src/bucket.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::marker::PhantomData;
33

44
use cosmwasm_std::{to_vec, StdError, StdResult, Storage};
55
#[cfg(feature = "iterator")]
6-
use cosmwasm_std::{Order, KV};
6+
use cosmwasm_std::{Order, Pair};
77

88
use crate::length_prefixed::{to_length_prefixed, to_length_prefixed_nested};
99
#[cfg(feature = "iterator")]
@@ -88,7 +88,7 @@ where
8888
start: Option<&[u8]>,
8989
end: Option<&[u8]>,
9090
order: Order,
91-
) -> Box<dyn Iterator<Item = StdResult<KV<T>>> + 'b> {
91+
) -> Box<dyn Iterator<Item = StdResult<Pair<T>>> + 'b> {
9292
let mapped = range_with_prefix(self.storage, &self.prefix, start, end, order)
9393
.map(deserialize_kv::<T>);
9494
Box::new(mapped)
@@ -159,7 +159,7 @@ where
159159
start: Option<&[u8]>,
160160
end: Option<&[u8]>,
161161
order: Order,
162-
) -> Box<dyn Iterator<Item = StdResult<KV<T>>> + 'b> {
162+
) -> Box<dyn Iterator<Item = StdResult<Pair<T>>> + 'b> {
163163
let mapped = range_with_prefix(self.storage, &self.prefix, start, end, order)
164164
.map(deserialize_kv::<T>);
165165
Box::new(mapped)
@@ -441,7 +441,7 @@ mod tests {
441441
bucket.save(b"maria", &maria).unwrap();
442442
bucket.save(b"jose", &jose).unwrap();
443443

444-
let res_data: StdResult<Vec<KV<Data>>> =
444+
let res_data: StdResult<Vec<Pair<Data>>> =
445445
bucket.range(None, None, Order::Ascending).collect();
446446
let data = res_data.unwrap();
447447
assert_eq!(data.len(), 2);
@@ -450,7 +450,7 @@ mod tests {
450450

451451
// also works for readonly
452452
let read_bucket = bucket_read::<Data>(&store, b"data");
453-
let res_data: StdResult<Vec<KV<Data>>> =
453+
let res_data: StdResult<Vec<Pair<Data>>> =
454454
read_bucket.range(None, None, Order::Ascending).collect();
455455
let data = res_data.unwrap();
456456
assert_eq!(data.len(), 2);

packages/storage/src/namespace_helpers.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use cosmwasm_std::Storage;
22
#[cfg(feature = "iterator")]
3-
use cosmwasm_std::{Order, KV};
3+
use cosmwasm_std::{Order, Pair};
44

55
pub(crate) fn get_with_prefix(
66
storage: &dyn Storage,
@@ -37,7 +37,7 @@ pub(crate) fn range_with_prefix<'a>(
3737
start: Option<&[u8]>,
3838
end: Option<&[u8]>,
3939
order: Order,
40-
) -> Box<dyn Iterator<Item = KV> + 'a> {
40+
) -> Box<dyn Iterator<Item = Pair> + 'a> {
4141
// prepare start, end with prefix
4242
let start = match start {
4343
Some(s) => concat(namespace, s),
@@ -153,7 +153,7 @@ mod tests {
153153

154154
// ensure we get proper result from prefixed_range iterator
155155
let iter = range_with_prefix(&storage, &prefix, None, None, Order::Descending);
156-
let elements: Vec<KV> = iter.collect();
156+
let elements: Vec<Pair> = iter.collect();
157157
assert_eq!(
158158
elements,
159159
vec![
@@ -179,14 +179,14 @@ mod tests {
179179
set_with_prefix(&mut storage, &other_prefix, b"moon", b"buggy");
180180

181181
// make sure start and end are applied properly
182-
let res: Vec<KV> =
182+
let res: Vec<Pair> =
183183
range_with_prefix(&storage, &prefix, Some(b"b"), Some(b"c"), Order::Ascending)
184184
.collect();
185185
assert_eq!(res.len(), 1);
186186
assert_eq!(res[0], (b"bar".to_vec(), b"none".to_vec()));
187187

188188
// make sure start and end are applied properly
189-
let res: Vec<KV> = range_with_prefix(
189+
let res: Vec<Pair> = range_with_prefix(
190190
&storage,
191191
&prefix,
192192
Some(b"bas"),
@@ -196,7 +196,7 @@ mod tests {
196196
.collect();
197197
assert_eq!(res.len(), 0);
198198

199-
let res: Vec<KV> =
199+
let res: Vec<Pair> =
200200
range_with_prefix(&storage, &prefix, Some(b"ant"), None, Order::Ascending).collect();
201201
assert_eq!(res.len(), 2);
202202
assert_eq!(res[0], (b"bar".to_vec(), b"none".to_vec()));

packages/storage/src/prefixed_storage.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use cosmwasm_std::Storage;
22
#[cfg(feature = "iterator")]
3-
use cosmwasm_std::{Order, KV};
3+
use cosmwasm_std::{Order, Pair};
44

55
use crate::length_prefixed::{to_length_prefixed, to_length_prefixed_nested};
66
#[cfg(feature = "iterator")]
@@ -62,7 +62,7 @@ impl<'a> PrefixedStorage<'a> {
6262
start: Option<&[u8]>,
6363
end: Option<&[u8]>,
6464
order: Order,
65-
) -> Box<dyn Iterator<Item = KV> + 'b> {
65+
) -> Box<dyn Iterator<Item = Pair> + 'b> {
6666
range_with_prefix(self.storage, &self.prefix, start, end, order)
6767
}
6868
}
@@ -100,7 +100,7 @@ impl<'a> ReadonlyPrefixedStorage<'a> {
100100
start: Option<&[u8]>,
101101
end: Option<&[u8]>,
102102
order: Order,
103-
) -> Box<dyn Iterator<Item = KV> + 'b> {
103+
) -> Box<dyn Iterator<Item = Pair> + 'b> {
104104
range_with_prefix(self.storage, &self.prefix, start, end, order)
105105
}
106106
}

packages/storage/src/type_helpers.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use serde::de::DeserializeOwned;
22
use std::any::type_name;
33

44
#[cfg(feature = "iterator")]
5-
use cosmwasm_std::KV;
5+
use cosmwasm_std::Pair;
66
use cosmwasm_std::{from_slice, StdError, StdResult};
77

88
/// may_deserialize parses json bytes from storage (Option), returning Ok(None) if no data present
@@ -27,7 +27,7 @@ pub(crate) fn must_deserialize<T: DeserializeOwned>(value: &Option<Vec<u8>>) ->
2727
}
2828

2929
#[cfg(feature = "iterator")]
30-
pub(crate) fn deserialize_kv<T: DeserializeOwned>(kv: KV) -> StdResult<KV<T>> {
30+
pub(crate) fn deserialize_kv<T: DeserializeOwned>(kv: Pair<Vec<u8>>) -> StdResult<Pair<T>> {
3131
let (k, v) = kv;
3232
let t = from_slice::<T>(&v)?;
3333
Ok((k, t))

packages/vm/src/backend.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use thiserror::Error;
55

66
use cosmwasm_std::{Binary, CanonicalAddr, ContractResult, HumanAddr, SystemResult};
77
#[cfg(feature = "iterator")]
8-
use cosmwasm_std::{Order, KV};
8+
use cosmwasm_std::{Order, Pair};
99

1010
#[derive(Copy, Clone, Debug)]
1111
pub struct GasInfo {
@@ -104,7 +104,7 @@ pub trait Storage {
104104
/// This call must not change data in the storage, but incrementing an iterator can be a mutating operation on
105105
/// the Storage implementation.
106106
#[cfg(feature = "iterator")]
107-
fn next(&mut self, iterator_id: u32) -> BackendResult<Option<KV>>;
107+
fn next(&mut self, iterator_id: u32) -> BackendResult<Option<Pair>>;
108108

109109
fn set(&mut self, key: &[u8], value: &[u8]) -> BackendResult<()>;
110110

0 commit comments

Comments
 (0)