etcd_rs/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    /// Creates a new DeleteRequest for the specified key range.
12    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    /// When set, responds with the key-value pair data before the update from this Delete request.
27    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}