darkredis/connection/
builder.rs

1///A builder struct for commands where you set multiple values at once. It utilizes
2///references to ensure that it does not copy any of the data given to it. It supports
3///the classic builder-pattern, as well as a mutable pattern.
4///# Example
5///```
6///# use darkredis::MSetBuilder;
7/// //Builder-style
8///let mut builder = MSetBuilder::new().set(b"example-key", b"some-value");
9///
10/// // Mutable style
11///builder.append(b"some-other-key", b"some-value");
12///```
13#[derive(Debug, Default)]
14pub struct MSetBuilder<'a> {
15    inner: Vec<&'a [u8]>,
16}
17
18impl<'a> MSetBuilder<'a> {
19    ///Create a new instance.
20    pub fn new() -> Self {
21        Self { inner: Vec::new() }
22    }
23
24    pub(crate) fn build(&'a self) -> impl Iterator<Item = &'a &'a [u8]> {
25        self.inner.iter()
26    }
27
28    ///Add `key` to be set to `value`, mutable style.
29    #[inline]
30    pub fn append<K, V>(&'a mut self, key: &'a K, value: &'a V)
31    where
32        K: AsRef<[u8]>,
33        V: AsRef<[u8]>,
34    {
35        self.inner.push(key.as_ref());
36        self.inner.push(value.as_ref());
37    }
38
39    ///Add `key` to be set to `value`, builder-style.
40    #[inline]
41    pub fn set<K, V>(mut self, key: &'a K, value: &'a V) -> Self
42    where
43        K: AsRef<[u8]>,
44        V: AsRef<[u8]>,
45    {
46        self.inner.push(key.as_ref());
47        self.inner.push(value.as_ref());
48        self
49    }
50}