diff --git a/src/kv/key.rs b/src/kv/key.rs index fa19d3f6..1e943a9d 100644 --- a/src/kv/key.rs +++ b/src/kv/key.rs @@ -1,7 +1,8 @@ // Copyright 2019 TiKV Project Authors. Licensed under Apache-2.0. +use std::borrow::Borrow; use std::fmt; -use std::ops::Bound; +use std::ops::{Bound, Deref}; #[allow(unused_imports)] #[cfg(test)] @@ -156,6 +157,26 @@ impl Key { } } +impl AsRef<[u8]> for Key { + fn as_ref(&self) -> &[u8] { + self.0.as_ref() + } +} + +impl Borrow<[u8]> for Key { + fn borrow(&self) -> &[u8] { + self.0.borrow() + } +} + +impl Deref for Key { + type Target = [u8]; + + fn deref(&self) -> &Self::Target { + self.0.deref() + } +} + impl From> for Key { fn from(v: Vec) -> Self { Key(v) @@ -185,6 +206,7 @@ impl<'a> From<&'a Vec> for &'a Key { unsafe { &*(key as *const Vec as *const Key) } } } + impl AsRef for Key { fn as_ref(&self) -> &Key { self diff --git a/src/region_cache.rs b/src/region_cache.rs index 33d1729c..70d17289 100644 --- a/src/region_cache.rs +++ b/src/region_cache.rs @@ -74,7 +74,7 @@ impl RegionCache { let res = { region_cache_guard .key_to_ver_id - .range(..=key) + .range::(..=key) .next_back() .map(|(x, y)| (x.clone(), y.clone())) }; @@ -180,9 +180,9 @@ impl RegionCache { let mut search_range = { if end_key.is_empty() { - cache.key_to_ver_id.range(..) + cache.key_to_ver_id.range::(..) } else { - cache.key_to_ver_id.range(..end_key) + cache.key_to_ver_id.range::(..end_key) } }; while let Some((_, ver_id_in_cache)) = search_range.next_back() { diff --git a/tests/integration_tests.rs b/tests/integration_tests.rs index 10dc4d3f..89a536ea 100644 --- a/tests/integration_tests.rs +++ b/tests/integration_tests.rs @@ -1155,8 +1155,8 @@ async fn txn_get_for_update() -> Result<()> { .map(From::from) .collect(); t2.commit().await?; - assert!(res.get(&key1.clone().into()).unwrap() == &value1); - assert!(res.get(&key2.into()).unwrap() == &value2); + assert!(res.get(key1.as_bytes()).unwrap() == &value1); + assert!(res.get(key2.as_bytes()).unwrap() == &value2); assert!(t3.get_for_update(key1).await?.is_none()); assert!(t3.commit().await.is_err());