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}