rcfe_core/options/
put.rs

1use crate::{ByteSequence, etcdserverpb};
2use etcdserverpb::PutRequest;
3
4#[derive(Debug, Clone, Default)]
5pub struct PutOptions {
6    /// lease is the lease ID to associate with the key in the key-value store. A lease
7    /// value of 0 indicates no lease.
8    pub lease: i64,
9
10    /// If true, the previous key-value pair will be returned in the response.
11    /// Default is false.
12    pub prev_kv: bool,
13
14    /// If true, the lease field in the PutRequest will be ignored.
15    /// Default is false.
16    pub ignore_lease: bool,
17
18    /// If true, the value field in the PutRequest will be ignored.
19    /// Default is false.
20    pub ignore_value: bool,
21}
22
23impl PutOptions {
24    pub fn to_request(&self, key: &ByteSequence, value: &ByteSequence) -> PutRequest {
25        PutRequest {
26            key: key.to_vec(),
27            value: match self.ignore_value {
28                true => ByteSequence::empty().to_vec(),
29                false => value.to_vec(),
30            },
31            lease: self.lease,
32            prev_kv: self.prev_kv,
33            ignore_lease: self.ignore_lease,
34            ignore_value: self.ignore_value,
35        }
36    }
37
38    pub fn builder() -> PutOptionsBuilder {
39        PutOptionsBuilder::default()
40    }
41}
42
43#[derive(Debug, Clone, Default)]
44pub struct PutOptionsBuilder {
45    lease: Option<i64>,
46    prev_kv: Option<bool>,
47    ignore_lease: Option<bool>,
48    ignore_value: Option<bool>,
49}
50
51impl PutOptionsBuilder {
52    pub fn lease(mut self, lease: i64) -> Self {
53        self.lease = Some(lease);
54        self
55    }
56
57    pub fn prev_kv(mut self, prev_kv: bool) -> Self {
58        self.prev_kv = Some(prev_kv);
59        self
60    }
61
62    pub fn ignore_lease(mut self, ignore_lease: bool) -> Self {
63        self.ignore_lease = Some(ignore_lease);
64        self
65    }
66
67    pub fn ignore_value(mut self, ignore_value: bool) -> Self {
68        self.ignore_value = Some(ignore_value);
69        self
70    }
71
72    pub fn build(self) -> PutOptions {
73        let mut options = PutOptions::default();
74        if let Some(lease) = self.lease {
75            options.lease = lease;
76        }
77
78        if let Some(prev_kv) = self.prev_kv {
79            options.prev_kv = prev_kv;
80        }
81
82        if let Some(ignore_lease) = self.ignore_lease {
83            options.ignore_lease = ignore_lease;
84        }
85
86        if let Some(ignore_value) = self.ignore_value {
87            options.ignore_value = ignore_value;
88        }
89        options
90    }
91}