-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathvalue.rs
104 lines (90 loc) · 3.23 KB
/
value.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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
use crate::{
commands::{FlushingMode, ServerCommands, SetCommands},
resp::Value,
tests::{get_test_client, log_try_init},
RedisError, RedisErrorKind, Result,
};
use serial_test::serial;
use std::collections::{BTreeSet, HashMap, HashSet};
#[cfg_attr(feature = "tokio-runtime", tokio::test)]
#[cfg_attr(feature = "async-std-runtime", async_std::test)]
#[serial]
async fn from_single_value_array() -> Result<()> {
let client = get_test_client().await?;
client.flushall(FlushingMode::Sync).await?;
client
.sadd("key", ["member1", "member2", "member3"])
.await?;
let members: Vec<String> = client.smembers("key").await?;
assert_eq!(3, members.len());
assert!(members.contains(&"member1".to_owned()));
assert!(members.contains(&"member2".to_owned()));
assert!(members.contains(&"member3".to_owned()));
let members: HashSet<String> = client.smembers("key").await?;
assert_eq!(3, members.len());
assert!(members.contains("member1"));
assert!(members.contains("member2"));
assert!(members.contains("member3"));
let members: BTreeSet<String> = client.smembers("key").await?;
assert_eq!(3, members.len());
assert!(members.contains("member1"));
assert!(members.contains("member2"));
assert!(members.contains("member3"));
Ok(())
}
#[test]
fn tuple() -> Result<()> {
log_try_init();
let value = Value::Array(vec![
Value::BulkString("first".as_bytes().to_vec()),
Value::BulkString("second".as_bytes().to_vec()),
]);
let result: Vec<String> = value.into()?;
assert_eq!(2, result.len());
assert_eq!("first".to_owned(), result[0]);
assert_eq!("second".to_owned(), result[1]);
let values = Value::Array(vec![
Value::BulkString("first".as_bytes().to_vec()),
Value::BulkString("second".as_bytes().to_vec()),
]);
let result: (String, String) = values.into()?;
assert_eq!(("first".to_owned(), "second".to_owned()), result);
let value = Value::Array(vec![
Value::Array(vec![
Value::BulkString("first".as_bytes().to_vec()),
Value::BulkString("second".as_bytes().to_vec()),
]),
Value::Array(vec![
Value::BulkString("third".as_bytes().to_vec()),
Value::BulkString("fourth".as_bytes().to_vec()),
]),
]);
let result: Vec<(String, String)> = value.into()?;
assert_eq!(2, result.len());
assert_eq!(("first".to_owned(), "second".to_owned()), result[0]);
assert_eq!(("third".to_owned(), "fourth".to_owned()), result[1]);
Ok(())
}
#[test]
fn display() {
log_try_init();
log::debug!(
"{}",
Value::Array(vec![
Value::Integer(12),
Value::Double(12.12),
Value::SimpleString("OK".to_owned()),
Value::BulkString(b"mystring".to_vec()),
Value::Boolean(true),
Value::Error(RedisError {
kind: RedisErrorKind::Err,
description: "MyError".to_owned()
}),
Value::Nil,
Value::Map(HashMap::from([
(Value::BulkString(b"field1".to_vec()), Value::Integer(12)),
(Value::BulkString(b"field2".to_vec()), Value::Double(12.12))
]))
])
);
}