Skip to content

Commit 8708bad

Browse files
DOC-5792 Rust hash examples
1 parent 9223cac commit 8708bad

File tree

2 files changed

+406
-0
lines changed

2 files changed

+406
-0
lines changed
Lines changed: 203 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
// EXAMPLE: hash_tutorial
2+
#[cfg(test)]
3+
mod tests {
4+
use redis::AsyncCommands;
5+
6+
#[tokio::test]
7+
async fn run() {
8+
let mut r = match redis::Client::open("redis://127.0.0.1") {
9+
Ok(client) => {
10+
match client.get_multiplexed_async_connection().await {
11+
Ok(conn) => conn,
12+
Err(e) => {
13+
println!("Failed to connect to Redis: {e}");
14+
return;
15+
}
16+
}
17+
},
18+
Err(e) => {
19+
println!("Failed to create Redis client: {e}");
20+
return;
21+
}
22+
};
23+
// REMOVE_START
24+
let _: () = r.flushall().await.expect("Failed to flushall");
25+
// REMOVE_END
26+
27+
// STEP_START set_get_all
28+
let hash_fields = [
29+
("model", "Deimos"),
30+
("brand", "Ergonom"),
31+
("type", "Enduro bikes"),
32+
("price", "4972"),
33+
];
34+
35+
if let Ok(res) = r.hset_multiple("bike:1", &hash_fields).await {
36+
let res: String = res;
37+
println!("{res}"); // >>> OK
38+
// REMOVE_START
39+
assert_eq!(res, "OK");
40+
// REMOVE_END
41+
}
42+
43+
match r.hget("bike:1", "model").await {
44+
Ok(res) => {
45+
let res: String = res;
46+
println!("{res}"); // >>> Deimos
47+
// REMOVE_START
48+
assert_eq!(res, "Deimos");
49+
// REMOVE_END
50+
},
51+
Err(e) => {
52+
println!("Error getting bike:1 model: {e}");
53+
return;
54+
}
55+
};
56+
57+
match r.hget("bike:1", "price").await {
58+
Ok(res) => {
59+
let res: String = res;
60+
println!("{res}"); // >>> 4972
61+
// REMOVE_START
62+
assert_eq!(res, "4972");
63+
// REMOVE_END
64+
},
65+
Err(e) => {
66+
println!("Error getting bike:1 price: {e}");
67+
return;
68+
}
69+
};
70+
71+
match r.hgetall("bike:1").await {
72+
Ok(res) => {
73+
let res: Vec<(String, String)> = res;
74+
println!("{res:?}");
75+
// >>> [("model", "Deimos"), ("brand", "Ergonom"), ("type", "Enduro bikes"), ("price", "4972")]
76+
// REMOVE_START
77+
assert_eq!(res.len(), 4);
78+
assert_eq!(res[0].0, "model");
79+
assert_eq!(res[0].1, "Deimos");
80+
assert_eq!(res[1].0, "brand");
81+
assert_eq!(res[1].1, "Ergonom");
82+
assert_eq!(res[2].0, "type");
83+
assert_eq!(res[2].1, "Enduro bikes");
84+
assert_eq!(res[3].0, "price");
85+
assert_eq!(res[3].1, "4972");
86+
// REMOVE_END
87+
},
88+
Err(e) => {
89+
println!("Error getting bike:1: {e}");
90+
return;
91+
}
92+
};
93+
// STEP_END
94+
95+
// STEP_START hmget
96+
match r.hmget("bike:1", &["model", "price"]).await {
97+
Ok(res) => {
98+
let res: Vec<String> = res;
99+
println!("{res:?}"); // >>> ["Deimos", "4972"]
100+
// REMOVE_START
101+
assert_eq!(res.len(), 2);
102+
assert_eq!(res[0], "Deimos");
103+
assert_eq!(res[1], "4972");
104+
// REMOVE_END
105+
},
106+
Err(e) => {
107+
println!("Error getting bike:1: {e}");
108+
return;
109+
}
110+
};
111+
// STEP_END
112+
113+
// STEP_START hincrby
114+
if let Ok(res) = r.hincr("bike:1", "price", 100).await {
115+
let res: i32 = res;
116+
println!("{res}"); // >>> 5072
117+
// REMOVE_START
118+
assert_eq!(res, 5072);
119+
// REMOVE_END
120+
}
121+
122+
if let Ok(res) = r.hincr("bike:1", "price", -100).await {
123+
let res: i32 = res;
124+
println!("{res}"); // >>> 4972
125+
// REMOVE_START
126+
assert_eq!(res, 4972);
127+
// REMOVE_END
128+
}
129+
// STEP_END
130+
131+
// STEP_START incrby_get_mget
132+
if let Ok(res) = r.hincr("bike:1:stats", "rides", 1).await {
133+
let res: i32 = res;
134+
println!("{res}"); // >>> 1
135+
// REMOVE_START
136+
assert_eq!(res, 1);
137+
// REMOVE_END
138+
}
139+
140+
if let Ok(res) = r.hincr("bike:1:stats", "rides", 1).await {
141+
let res: i32 = res;
142+
println!("{res}"); // >>> 2
143+
// REMOVE_START
144+
assert_eq!(res, 2);
145+
// REMOVE_END
146+
}
147+
148+
if let Ok(res) = r.hincr("bike:1:stats", "rides", 1).await {
149+
let res: i32 = res;
150+
println!("{res}"); // >>> 3
151+
// REMOVE_START
152+
assert_eq!(res, 3);
153+
// REMOVE_END
154+
}
155+
156+
if let Ok(res) = r.hincr("bike:1:stats", "crashes", 1).await {
157+
let res: i32 = res;
158+
println!("{res}"); // >>> 1
159+
// REMOVE_START
160+
assert_eq!(res, 1);
161+
// REMOVE_END
162+
}
163+
164+
if let Ok(res) = r.hincr("bike:1:stats", "owners", 1).await {
165+
let res: i32 = res;
166+
println!("{res}"); // >>> 1
167+
// REMOVE_START
168+
assert_eq!(res, 1);
169+
// REMOVE_END
170+
}
171+
172+
match r.hget("bike:1:stats", "rides").await {
173+
Ok(res) => {
174+
let res: i32 = res;
175+
println!("{res}"); // >>> 3
176+
// REMOVE_START
177+
assert_eq!(res, 3);
178+
// REMOVE_END
179+
},
180+
Err(e) => {
181+
println!("Error getting bike:1:stats rides: {e}");
182+
return;
183+
}
184+
};
185+
186+
match r.hmget("bike:1:stats", &["crashes", "owners"]).await {
187+
Ok(res) => {
188+
let res: Vec<i32> = res;
189+
println!("{res:?}"); // >>> [1, 1]
190+
// REMOVE_START
191+
assert_eq!(res.len(), 2);
192+
assert_eq!(res[0], 1);
193+
assert_eq!(res[1], 1);
194+
// REMOVE_END
195+
},
196+
Err(e) => {
197+
println!("Error getting bike:1:stats crashes and owners: {e}");
198+
return;
199+
}
200+
};
201+
// STEP_END
202+
}
203+
}

0 commit comments

Comments
 (0)