inve_etcd/kv/
delete.rs

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}