redis_event/cmd/
hyperloglog.rs

1/*!
2HyperLogLog相关的命令定义、解析
3
4所有涉及到的命令参考[Redis Command Reference]
5
6[Redis Command Reference]: https://redis.io/commands#hyperloglog
7*/
8
9use std::slice::Iter;
10
11#[derive(Debug)]
12pub struct PFADD<'a> {
13    pub key: &'a [u8],
14    pub elements: Vec<&'a [u8]>,
15}
16
17pub(crate) fn parse_pfadd(mut iter: Iter<Vec<u8>>) -> PFADD {
18    let key = iter.next().unwrap();
19    let mut elements = Vec::new();
20    while let Some(element) = iter.next() {
21        elements.push(element.as_slice());
22    }
23    PFADD { key, elements }
24}
25
26#[derive(Debug)]
27pub struct PFCOUNT<'a> {
28    pub keys: Vec<&'a [u8]>,
29}
30
31pub(crate) fn parse_pfcount(mut iter: Iter<Vec<u8>>) -> PFCOUNT {
32    let mut keys = Vec::new();
33    while let Some(key) = iter.next() {
34        keys.push(key.as_slice());
35    }
36    PFCOUNT { keys }
37}
38
39#[derive(Debug)]
40pub struct PFMERGE<'a> {
41    pub dest_key: &'a [u8],
42    pub source_keys: Vec<&'a [u8]>,
43}
44
45pub(crate) fn parse_pfmerge(mut iter: Iter<Vec<u8>>) -> PFMERGE {
46    let dest_key = iter.next().unwrap();
47    let mut source_keys = Vec::new();
48    while let Some(source) = iter.next() {
49        source_keys.push(source.as_slice());
50    }
51    PFMERGE { dest_key, source_keys }
52}