-
Notifications
You must be signed in to change notification settings - Fork 72
/
Copy pathresponse.rs
73 lines (61 loc) · 2.06 KB
/
response.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
use redis_module::{
redis_module, redisvalue::RedisValueKey, Context, NextArg, RedisError, RedisResult,
RedisString, RedisValue,
};
use std::collections::{BTreeMap, BTreeSet};
fn map_mget(ctx: &Context, args: Vec<RedisString>) -> RedisResult {
if args.len() < 2 {
return Err(RedisError::WrongArity);
}
let mut args = args.into_iter().skip(1);
let key_name = args.next_arg()?;
let fields: Vec<RedisString> = args.collect();
let key = ctx.open_key(&key_name);
let values = key.hash_get_multi(&fields)?;
let res = match values {
None => RedisValue::Null,
Some(values) => {
let mut map: BTreeMap<RedisValueKey, RedisValue> = BTreeMap::new();
for (field, value) in values.into_iter() {
map.insert(
RedisValueKey::BulkRedisString(field),
RedisValue::BulkRedisString(value),
);
}
RedisValue::OrderedMap(map)
}
};
Ok(res)
}
fn map_unique(ctx: &Context, args: Vec<RedisString>) -> RedisResult {
if args.len() < 2 {
return Err(RedisError::WrongArity);
}
let mut args = args.into_iter().skip(1);
let key_name = args.next_arg()?;
let fields: Vec<RedisString> = args.collect();
let key = ctx.open_key(&key_name);
let values = key.hash_get_multi(&fields)?;
let res = match values {
None => RedisValue::Null,
Some(values) => {
let mut set: BTreeSet<RedisValueKey> = BTreeSet::new();
for (_, value) in values.into_iter() {
set.insert(RedisValueKey::BulkRedisString(value));
}
RedisValue::OrderedSet(set)
}
};
Ok(res)
}
//////////////////////////////////////////////////////
redis_module! {
name: "response",
version: 1,
allocator: (redis_module::alloc::RedisAlloc, redis_module::alloc::RedisAlloc),
data_types: [],
commands: [
["map.mget", map_mget, "readonly", 1, 1, 1, ""],
["map.unique", map_unique, "readonly", 1, 1, 1, ""],
],
}