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