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}