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