1use super::{KeyRange, KeyValue};
2use crate::proto::etcdserverpb;
3use crate::ResponseHeader;
4
5#[derive(Debug)]
6pub struct DeleteRequest {
7 proto: etcdserverpb::DeleteRangeRequest,
8}
9
10impl DeleteRequest {
11 pub fn new<T>(key_range: T) -> Self
13 where
14 T: Into<KeyRange>,
15 {
16 let key_range = key_range.into();
17 Self {
18 proto: etcdserverpb::DeleteRangeRequest {
19 key: key_range.key,
20 range_end: key_range.range_end,
21 prev_kv: false,
22 },
23 }
24 }
25
26 pub fn prev_kv(mut self, prev_kv: bool) -> Self {
28 self.proto.prev_kv = prev_kv;
29 self
30 }
31}
32
33impl<T> From<T> for DeleteRequest
34where
35 T: Into<KeyRange>,
36{
37 fn from(key_range: T) -> Self {
38 Self::new(key_range)
39 }
40}
41
42impl Into<etcdserverpb::DeleteRangeRequest> for DeleteRequest {
43 fn into(self) -> etcdserverpb::DeleteRangeRequest {
44 self.proto
45 }
46}
47
48#[derive(Debug, Clone)]
49pub struct DeleteResponse {
50 pub header: ResponseHeader,
51 pub deleted: u64,
52 pub prev_kvs: Vec<KeyValue>,
53}
54
55impl From<etcdserverpb::DeleteRangeResponse> for DeleteResponse {
56 fn from(proto: etcdserverpb::DeleteRangeResponse) -> Self {
57 Self {
58 header: From::from(proto.header.expect("must fetch header")),
59 deleted: proto.deleted as u64,
60 prev_kvs: proto.prev_kvs.into_iter().map(From::from).collect(),
61 }
62 }
63}