rcfe_core/options/delete.rs
1use crate::{
2 ByteSequence,
3 etcdserverpb::DeleteRangeRequest
4};
5
6/// Options for deleting keys in the key-value store
7/// # Fields
8/// * `prefix` - A key is treated as a prefix
9/// * `prev_kv` - Return the previous key-value pair before deletion
10/// # Examples
11/// ```rust
12/// use rcfe_core::options::kv::DeleteOptions;
13/// let delete_options = DeleteOptions {
14/// prefix: true,
15/// prev_kv: false,
16/// };
17/// ```
18#[derive(Default, Debug, Clone)]
19pub struct DeleteOptions {
20 /// A key is treated as a prefix
21 pub prefix: bool,
22 /// Return the previous key-value pair before deletion
23 pub prev_kv: bool,
24}
25
26impl DeleteOptions {
27 /// Creates a builder for DeleteOptions
28 /// # Examples
29 /// ```rust
30 /// use rcfe_core::options::kv::{DeleteOptions, DeleteOptionsBuilder};
31 /// let delete_options = DeleteOptions::builder()
32 /// .prefix(true)
33 /// .prev_kv(true)
34 /// .build();
35 /// ```
36 pub fn builder() -> DeleteOptionsBuilder {
37 DeleteOptionsBuilder::default()
38 }
39
40 /// Converts DeleteOptions to an etcdserverpb::DeleteRangeRequest
41 /// # Examples
42 /// ```rust
43 /// use rcfe_core::options::kv::DeleteOptions;
44 /// use rcfe_core::ByteSequence;
45 /// use rcfe_core::etcdserverpb::DeleteRangeRequest;
46 /// let delete_options = DeleteOptions::builder()
47 /// .prefix(true)
48 /// .prev_kv(true)
49 /// .build();
50 /// let key = ByteSequence::from("my_key");
51 /// let request: DeleteRangeRequest = delete_options.to_request(key);
52 /// ```
53 pub fn to_request(&self, key: &ByteSequence) -> DeleteRangeRequest {
54 let mut request = DeleteRangeRequest {
55 key: key.to_vec(),
56 ..Default::default()
57 };
58
59 if self.prefix {
60 request.range_end = key.next().to_vec();
61 }
62
63 request.prev_kv = self.prev_kv;
64
65 request
66 }
67}
68
69/// Builder for DeleteOptions
70/// # Examples
71/// ```rust
72/// use rcfe_core::options::kv::DeleteOptionsBuilder;
73/// let delete_options = DeleteOptionsBuilder::default()
74/// .prefix(true)
75/// .prev_kv(true)
76/// .build();
77/// ```
78#[derive(Default, Debug, Clone)]
79pub struct DeleteOptionsBuilder {
80 prefix: Option<bool>,
81 prev_kv: Option<bool>,
82}
83
84impl DeleteOptionsBuilder {
85 /// Sets the prefix option for DeleteOptions
86 /// # Examples
87 /// ```rust
88 /// use rcfe_core::options::kv::DeleteOptionsBuilder;
89 /// let delete_options = DeleteOptionsBuilder::default()
90 /// .prefix(true)
91 /// .build();
92 /// ```
93 pub fn prefix(mut self, prefix: bool) -> Self {
94 self.prefix = Some(prefix);
95 self
96 }
97
98 /// Sets the prev_kv option for DeleteOptions
99 /// # Examples
100 /// ```rust
101 /// use rcfe_core::options::kv::DeleteOptionsBuilder;
102 /// let delete_options = DeleteOptionsBuilder::default()
103 /// .prev_kv(true)
104 /// .build();
105 /// ```
106 pub fn prev_kv(mut self, prev_kv: bool) -> Self {
107 self.prev_kv = Some(prev_kv);
108 self
109 }
110
111 /// Builds the DeleteOptions from the builder
112 /// # Examples
113 /// ```rust
114 /// use rcfe_core::options::kv::DeleteOptionsBuilder;
115 /// let delete_options = DeleteOptionsBuilder::default()
116 /// .prefix(true)
117 /// .prev_kv(true)
118 /// .build();
119 /// ```
120 pub fn build(self) -> DeleteOptions {
121 let mut options = DeleteOptions::default();
122 if let Some(prefix) = self.prefix {
123 options.prefix = prefix;
124 }
125
126 if let Some(prev_kv) = self.prev_kv {
127 options.prev_kv = prev_kv;
128 }
129
130 options
131 }
132}