Skip to content

Commit 701964d

Browse files
committed
refactor impl_kv_request macro
Signed-off-by: iosmanthus <[email protected]>
1 parent 5c5809a commit 701964d

File tree

4 files changed

+80
-155
lines changed

4 files changed

+80
-155
lines changed

src/raw/requests.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ pub fn new_raw_get_request(key: Vec<u8>, cf: Option<ColumnFamily>) -> kvrpcpb::R
3232
req
3333
}
3434

35-
impl_kv_request!(kvrpcpb::RawGetRequest, key; kvrpcpb::RawGetResponse;);
35+
impl_kv_request!(kvrpcpb::RawGetRequest, key; kvrpcpb::RawGetResponse);
3636
shardable_key!(kvrpcpb::RawGetRequest);
3737
collect_first!(kvrpcpb::RawGetResponse);
3838

@@ -66,7 +66,7 @@ pub fn new_raw_batch_get_request(
6666
req
6767
}
6868

69-
impl_kv_request!(kvrpcpb::RawBatchGetRequest, keys; kvrpcpb::RawBatchGetResponse;);
69+
impl_kv_request!(kvrpcpb::RawBatchGetRequest, keys; kvrpcpb::RawBatchGetResponse);
7070
shardable_keys!(kvrpcpb::RawBatchGetRequest);
7171

7272
impl Merge<kvrpcpb::RawBatchGetResponse> for Collect {
@@ -95,7 +95,7 @@ pub fn new_raw_put_request(
9595
req
9696
}
9797

98-
impl_kv_request!(kvrpcpb::RawPutRequest, key; kvrpcpb::RawPutResponse;);
98+
impl_kv_request!(kvrpcpb::RawPutRequest, key; kvrpcpb::RawPutResponse);
9999
shardable_key!(kvrpcpb::RawPutRequest);
100100
collect_first!(kvrpcpb::RawPutResponse);
101101

@@ -118,7 +118,7 @@ pub fn new_raw_batch_put_request(
118118
req
119119
}
120120

121-
impl_kv_request!(kvrpcpb::RawBatchPutRequest, pairs; kvrpcpb::RawBatchPutResponse;);
121+
impl_kv_request!(kvrpcpb::RawBatchPutRequest, pairs; kvrpcpb::RawBatchPutResponse);
122122

123123
impl Shardable for kvrpcpb::RawBatchPutRequest {
124124
type Shard = Vec<kvrpcpb::KvPair>;
@@ -155,7 +155,7 @@ pub fn new_raw_delete_request(
155155
req
156156
}
157157

158-
impl_kv_request!(kvrpcpb::RawDeleteRequest, key; kvrpcpb::RawDeleteResponse;);
158+
impl_kv_request!(kvrpcpb::RawDeleteRequest, key; kvrpcpb::RawDeleteResponse);
159159
shardable_key!(kvrpcpb::RawDeleteRequest);
160160
collect_first!(kvrpcpb::RawDeleteResponse);
161161
impl SingleKey for kvrpcpb::RawDeleteRequest {
@@ -175,7 +175,7 @@ pub fn new_raw_batch_delete_request(
175175
req
176176
}
177177

178-
impl_kv_request!(kvrpcpb::RawBatchDeleteRequest, keys; kvrpcpb::RawBatchDeleteResponse;);
178+
impl_kv_request!(kvrpcpb::RawBatchDeleteRequest, keys; kvrpcpb::RawBatchDeleteResponse);
179179
shardable_keys!(kvrpcpb::RawBatchDeleteRequest);
180180

181181
pub fn new_raw_delete_range_request(
@@ -193,7 +193,7 @@ pub fn new_raw_delete_range_request(
193193

194194
impl_kv_request!(
195195
kvrpcpb::RawDeleteRangeRequest;
196-
kvrpcpb::RawDeleteRangeResponse;
196+
kvrpcpb::RawDeleteRangeResponse
197197
);
198198

199199
shardable_range!(kvrpcpb::RawDeleteRangeRequest);
@@ -215,7 +215,7 @@ pub fn new_raw_scan_request(
215215
req
216216
}
217217

218-
impl_kv_request!(kvrpcpb::RawScanRequest; kvrpcpb::RawScanResponse, kvs;);
218+
impl_kv_request!(kvrpcpb::RawScanRequest; kvrpcpb::RawScanResponse, kvs);
219219
shardable_range!(kvrpcpb::RawScanRequest);
220220

221221
impl Merge<kvrpcpb::RawScanResponse> for Collect {
@@ -246,7 +246,7 @@ pub fn new_raw_batch_scan_request(
246246

247247
impl_kv_request!(
248248
kvrpcpb::RawBatchScanRequest, ranges;
249-
kvrpcpb::RawBatchScanResponse, kvs;
249+
kvrpcpb::RawBatchScanResponse, kvs
250250
);
251251

252252
impl Shardable for kvrpcpb::RawBatchScanRequest {
@@ -296,7 +296,7 @@ pub fn new_cas_request(
296296

297297
impl_kv_request!(
298298
kvrpcpb::RawCasRequest, key;
299-
kvrpcpb::RawCasResponse;
299+
kvrpcpb::RawCasResponse
300300
);
301301

302302
shardable_key!(kvrpcpb::RawCasRequest);

src/request/codec.rs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,14 @@ pub trait RequestCodec: Sized + Clone + Sync + Send + 'static {
2323
key
2424
}
2525

26+
fn encode_primary_lock(&self, lock: Vec<u8>) -> Vec<u8> {
27+
self.encode_key(lock)
28+
}
29+
30+
fn encode_primary_key(&self, key: Vec<u8>) -> Vec<u8> {
31+
self.encode_key(key)
32+
}
33+
2634
fn encode_mutations(&self, mutations: Vec<kvrpcpb::Mutation>) -> Vec<kvrpcpb::Mutation> {
2735
mutations
2836
.into_iter()
@@ -61,7 +69,7 @@ pub trait RequestCodec: Sized + Clone + Sync + Send + 'static {
6169
fn decode_error(&self, err: &mut kvrpcpb::KeyError) -> Result<()> {
6270
if err.has_locked() {
6371
let locked = err.mut_locked();
64-
self.decode_lock(locked)?;
72+
self.decode_lock_info(locked)?;
6573
}
6674

6775
if err.has_conflict() {
@@ -105,15 +113,15 @@ pub trait RequestCodec: Sized + Clone + Sync + Send + 'static {
105113
Ok(())
106114
}
107115

108-
fn decode_lock(&self, lock: &mut kvrpcpb::LockInfo) -> Result<()> {
116+
fn decode_lock_info(&self, lock: &mut kvrpcpb::LockInfo) -> Result<()> {
109117
self.decode_key(lock.mut_primary_lock())?;
110118
self.decode_key(lock.mut_key())?;
111119
self.decode_keys(lock.mut_secondaries())
112120
}
113121

114122
fn decode_locks(&self, locks: &mut [kvrpcpb::LockInfo]) -> Result<()> {
115123
for lock in locks.iter_mut() {
116-
self.decode_lock(lock)?;
124+
self.decode_lock_info(lock)?;
117125
}
118126

119127
Ok(())

src/request/mod.rs

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,24 +41,31 @@ pub trait KvRequest<C>: Request + Sized + Clone + Sync + Send + 'static {
4141
}
4242
}
4343

44+
pub trait IsDefault {
45+
fn is_default(&self) -> bool;
46+
}
47+
48+
impl<T: PartialEq + Default> IsDefault for T {
49+
fn is_default(&self) -> bool {
50+
*self == T::default()
51+
}
52+
}
53+
4454
macro_rules! impl_decode_response {
45-
($($o:ident)*; $($e:ident)*) => {
55+
($($o:ident)*) => {
4656
fn decode_response(&self, codec: &C, mut resp: Self::Response) -> Result<Self::Response> {
47-
$(
48-
paste::paste! {
49-
codec.[<decode_ $o>](resp.[<mut_ $o>]())?;
50-
}
51-
)*
52-
5357
// decode errors
5458
if resp.has_region_error() {
5559
codec.decode_region_error(resp.mut_region_error())?;
5660
}
5761

62+
#[allow(unused_imports)]
63+
use $crate::request::IsDefault;
64+
5865
$(
5966
paste::paste! {
60-
if resp.[<has_ $e>]() {
61-
codec.[<decode_ $e>](resp.[<mut_ $e>]())?;
67+
if !resp.[<get_ $o>]().is_default() {
68+
codec.[<decode_ $o>](resp.[<mut_ $o>]())?;
6269
}
6370
}
6471
)*
@@ -70,7 +77,7 @@ macro_rules! impl_decode_response {
7077

7178
#[macro_export]
7279
macro_rules! impl_kv_request {
73-
($req:ty $(,$i:ident)+; $resp:ty $(,$o:ident)*; $($e:ident),*) => {
80+
($req:ty $(,$i:ident)+; $resp:ty $(,$o:ident)*) => {
7481
impl<C> KvRequest<C> for $req
7582
where C: RequestCodec
7683
{
@@ -86,11 +93,11 @@ macro_rules! impl_kv_request {
8693
self
8794
}
8895

89-
impl_decode_response!{$($o)*; $($e)*}
96+
impl_decode_response!{$($o)*}
9097
}
9198
};
9299

93-
($req:ty; $resp:ty $(,$o:ident)*;$($e:ident)*) => {
100+
($req:ty; $resp:ty $(,$o:ident)*) => {
94101
impl<C> KvRequest<C> for $req
95102
where C: RequestCodec
96103
{
@@ -104,7 +111,7 @@ macro_rules! impl_kv_request {
104111
self
105112
}
106113

107-
impl_decode_response!{$($o)*; $($e)*}
114+
impl_decode_response!{$($o)*}
108115
}
109116
};
110117
}

0 commit comments

Comments
 (0)