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