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