From a6d42c32802de1b0f3ba9bebdb6114e334468cc2 Mon Sep 17 00:00:00 2001 From: Alex Steele <45648397+ADSteele916@users.noreply.github.com> Date: Sun, 22 Jun 2025 10:46:18 -0700 Subject: [PATCH] Implement AsRef<[u8]>, Borrow<[u8]>, and Deref for Key Signed-off-by: Alex Steele <45648397+ADSteele916@users.noreply.github.com> --- src/kv/key.rs | 24 +++++++++++++++++++++++- src/region_cache.rs | 6 +++--- 2 files changed, 26 insertions(+), 4 deletions(-) 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 8837de38..a0b2ccd5 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() {