1
+
2
+ // EXAMPLE: set_tutorial
3
+ #[ cfg( test) ]
4
+ mod tests {
5
+ use redis:: { AsyncCommands , ExistenceCheck } ;
6
+
7
+ #[ tokio:: test]
8
+ async fn run ( ) {
9
+ let mut r = match redis:: Client :: open ( "redis://127.0.0.1" ) {
10
+ Ok ( client) => {
11
+ match client. get_multiplexed_async_connection ( ) . await {
12
+ Ok ( conn) => conn,
13
+ Err ( e) => {
14
+ println ! ( "Failed to connect to Redis: {e}" ) ;
15
+ return ;
16
+ }
17
+ }
18
+ } ,
19
+ Err ( e) => {
20
+ println ! ( "Failed to create Redis client: {e}" ) ;
21
+ return ;
22
+ }
23
+ } ;
24
+
25
+ // STEP_START set_get
26
+ if let Ok ( res) = r. set ( "bike:1" , "Deimos" ) . await {
27
+ let res: String = res;
28
+ println ! ( "{res}" ) ; // >>> OK
29
+ // REMOVE_START
30
+ assert_eq ! ( res, "OK" ) ;
31
+ // REMOVE_END
32
+ }
33
+
34
+ match r. get ( "bike:1" ) . await {
35
+ Ok ( res) => {
36
+ let res: String = res;
37
+ println ! ( "{res}" ) ; // >>> Deimos
38
+ // REMOVE_START
39
+ assert_eq ! ( res, "Deimos" ) ;
40
+ // REMOVE_END
41
+ } ,
42
+ Err ( e) => {
43
+ println ! ( "Error getting foo: {e}" ) ;
44
+ return ;
45
+ }
46
+ } ;
47
+ // STEP_END
48
+
49
+ // STEP_START setnx_xx
50
+ if let Ok ( res) = r. set_options ( "bike:1" , "bike" , redis:: SetOptions :: default ( ) . conditional_set ( ExistenceCheck :: NX ) ) . await {
51
+ let res: bool = res;
52
+ println ! ( "{res}" ) ; // >>> false
53
+ // REMOVE_START
54
+ assert ! ( !res) ;
55
+ // REMOVE_END
56
+ }
57
+
58
+ match r. get ( "bike:1" ) . await {
59
+ Ok ( res) => {
60
+ let res: String = res;
61
+ println ! ( "{res}" ) ; // >>> Deimos
62
+ // REMOVE_START
63
+ assert_eq ! ( res, "Deimos" ) ;
64
+ // REMOVE_END
65
+ } ,
66
+ Err ( e) => {
67
+ println ! ( "Error getting foo: {e}" ) ;
68
+ return ;
69
+ }
70
+ } ;
71
+
72
+ if let Ok ( res) = r. set_options ( "bike:1" , "bike" , redis:: SetOptions :: default ( ) . conditional_set ( ExistenceCheck :: XX ) ) . await {
73
+ let res: String = res;
74
+ println ! ( "{res}" ) ; // >>> OK
75
+ // REMOVE_START
76
+ assert_eq ! ( res, "OK" ) ;
77
+ // REMOVE_END
78
+ }
79
+
80
+ match r. get ( "bike:1" ) . await {
81
+ Ok ( res) => {
82
+ let res: String = res;
83
+ println ! ( "{res}" ) ; // >>> bike
84
+ // REMOVE_START
85
+ assert_eq ! ( res, "bike" ) ;
86
+ // REMOVE_END
87
+ } ,
88
+ Err ( e) => {
89
+ println ! ( "Error getting foo: {e}" ) ;
90
+ return ;
91
+ }
92
+ } ;
93
+ // STEP_END
94
+
95
+ // STEP_START mset
96
+ if let Ok ( res) = r. mset ( & [ ( "bike:1" , "Deimos" ) , ( "bike:2" , "Ares" ) , ( "bike:3" , "Vanth" ) ] ) . await {
97
+ let res: String = res;
98
+ println ! ( "{res}" ) ; // >>> OK
99
+ // REMOVE_START
100
+ assert_eq ! ( res, "OK" ) ;
101
+ // REMOVE_END
102
+ }
103
+
104
+ match r. mget ( & [ "bike:1" , "bike:2" , "bike:3" ] ) . await {
105
+ Ok ( res) => {
106
+ let res: Vec < String > = res;
107
+ println ! ( "{res:?}" ) ; // >>> ["Deimos", "Ares", "Vanth"]
108
+ // REMOVE_START
109
+ assert_eq ! ( res. len( ) , 3 ) ;
110
+ assert_eq ! ( res[ 0 ] , "Deimos" ) ;
111
+ assert_eq ! ( res[ 1 ] , "Ares" ) ;
112
+ assert_eq ! ( res[ 2 ] , "Vanth" ) ;
113
+ // REMOVE_END
114
+ } ,
115
+ Err ( e) => {
116
+ println ! ( "Error getting foo: {e}" ) ;
117
+ return ;
118
+ }
119
+ } ;
120
+ // STEP_END
121
+
122
+ // STEP_START incr
123
+ if let Ok ( res) = r. set ( "total_crashes" , 0 ) . await {
124
+ let res: String = res;
125
+ println ! ( "{res}" ) ; // >>> OK
126
+ // REMOVE_START
127
+ assert_eq ! ( res, "OK" ) ;
128
+ // REMOVE_END
129
+ }
130
+
131
+ if let Ok ( res) = r. incr ( "total_crashes" , 1 ) . await {
132
+ let res: i32 = res;
133
+ println ! ( "{res}" ) ; // >>> 1
134
+ // REMOVE_START
135
+ assert_eq ! ( res, 1 ) ;
136
+ // REMOVE_END
137
+ }
138
+
139
+ if let Ok ( res) = r. incr ( "total_crashes" , 10 ) . await {
140
+ let res: i32 = res;
141
+ println ! ( "{res}" ) ; // >>> 11
142
+ // REMOVE_START
143
+ assert_eq ! ( res, 11 ) ;
144
+ // REMOVE_END
145
+ }
146
+ // STEP_END
147
+ }
148
+ }
0 commit comments