@@ -4,15 +4,6 @@ use connection::{Connection, ConnectionLike};
4
4
use cmd:: { cmd, Cmd , Pipeline , Iter } ;
5
5
6
6
7
- /// Mode for the bit operation on commands.
8
- #[ deriving( PartialEq , Eq , Clone , Show ) ]
9
- pub enum BitOp {
10
- BitAnd ,
11
- BitOr ,
12
- BitXor ,
13
- BitNot ,
14
- }
15
-
16
7
macro_rules! implement_commands {
17
8
(
18
9
$(
@@ -84,6 +75,17 @@ macro_rules! implement_commands {
84
75
( & self , key: K , pattern: P ) -> RedisResult <Iter <RV >> {
85
76
cmd( "SSCAN" ) . arg( key) . cursor_arg( 0 ) . arg( "MATCH" ) . arg( pattern) . iter( self )
86
77
}
78
+
79
+ /// Incrementally iterate sorted set elements.
80
+ fn zscan<K : ToRedisArgs , RV : FromRedisValue >( & self , key: K ) -> RedisResult <Iter <RV >> {
81
+ cmd( "ZSCAN" ) . arg( key) . cursor_arg( 0 ) . iter( self )
82
+ }
83
+
84
+ /// Incrementally iterate sorted set elements for elements matching a pattern.
85
+ fn zscan_match<K : ToRedisArgs , P : ToRedisArgs , RV : FromRedisValue >
86
+ ( & self , key: K , pattern: P ) -> RedisResult <Iter <RV >> {
87
+ cmd( "ZSCAN" ) . arg( key) . cursor_arg( 0 ) . arg( "MATCH" ) . arg( pattern) . iter( self )
88
+ }
87
89
}
88
90
89
91
/// Implements common redis commands for pipelines. Unlike the regular
@@ -223,15 +225,28 @@ implement_commands!(
223
225
cmd( "BITCOUNT" ) . arg( key) . arg( start) . arg( end)
224
226
}
225
227
226
- #[ doc="Perform a bitwise operation between multiple keys (containing string values)
228
+ #[ doc="Perform a bitwise AND between multiple keys (containing string values)
227
229
and store the result in the destination key." ]
228
- fn bitop<K : ToRedisArgs >( op: BitOp , dstkey: K , srckeys: K ) {
229
- cmd( "BITOP" ) . arg( match op {
230
- BitAnd => "AND" ,
231
- BitOr => "OR" ,
232
- BitXor => "XOR" ,
233
- BitNot => "NOT"
234
- } ) . arg( dstkey) . arg( srckeys)
230
+ fn bit_and<K : ToRedisArgs >( dstkey: K , srckeys: K ) {
231
+ cmd( "BITOP" ) . arg( "AND" ) . arg( dstkey) . arg( srckeys)
232
+ }
233
+
234
+ #[ doc="Perform a bitwise OR between multiple keys (containing string values)
235
+ and store the result in the destination key." ]
236
+ fn bit_or<K : ToRedisArgs >( dstkey: K , srckeys: K ) {
237
+ cmd( "BITOP" ) . arg( "OR" ) . arg( dstkey) . arg( srckeys)
238
+ }
239
+
240
+ #[ doc="Perform a bitwise XOR between multiple keys (containing string values)
241
+ and store the result in the destination key." ]
242
+ fn bit_xor<K : ToRedisArgs >( dstkey: K , srckeys: K ) {
243
+ cmd( "BITOP" ) . arg( "XOR" ) . arg( dstkey) . arg( srckeys)
244
+ }
245
+
246
+ #[ doc="Perform a bitwise NOT of the key (containing string values)
247
+ and store the result in the destination key." ]
248
+ fn bit_not<K : ToRedisArgs >( dstkey: K , srckey: K ) {
249
+ cmd( "BITOP" ) . arg( "NOT" ) . arg( dstkey) . arg( srckey)
235
250
}
236
251
237
252
#[ doc="Get the length of the value stored in a key." ]
@@ -470,6 +485,120 @@ implement_commands!(
470
485
fn sunionstore<K : ToRedisArgs >( dstkey: K , keys: K ) {
471
486
cmd( "SUNIONSTORE" ) . arg( dstkey) . arg( keys)
472
487
}
488
+
489
+ // sorted set commands
490
+
491
+ #[ doc="Add one member to a sorted set, or update its score
492
+ if it already exists." ]
493
+ fn zadd<K : ToRedisArgs , S : ToRedisArgs , M : ToRedisArgs >( key: K , member: M , score: S ) {
494
+ cmd( "ZADD" ) . arg( key) . arg( score) . arg( member)
495
+ }
496
+
497
+ #[ doc="Add multiple members to a sorted set, or update its score
498
+ if it already exists." ]
499
+ fn zadd_multiple<K : ToRedisArgs , S : ToRedisArgs , M : ToRedisArgs >( key: K , items: & [ ( S , M ) ] ) {
500
+ cmd( "ZADD" ) . arg( key) . arg( items)
501
+ }
502
+
503
+ #[ doc="Get the number of members in a sorted set." ]
504
+ fn zcard<K : ToRedisArgs >( key: K ) {
505
+ cmd( "ZCARD" ) . arg( key)
506
+ }
507
+
508
+ #[ doc="Count the members in a sorted set with scores within the given values." ]
509
+ fn zcount<K : ToRedisArgs , M : ToRedisArgs , MM : ToRedisArgs >( key: K , min: M , max: MM ) {
510
+ cmd( "ZCOUNT" ) . arg( key) . arg( min) . arg( max)
511
+ }
512
+
513
+ #[ doc="Count the members in a sorted set with scores within the given values." ]
514
+ fn zincr<K : ToRedisArgs , M : ToRedisArgs , D : ToRedisArgs >( key: K , member: M , delta: D ) {
515
+ cmd( "ZINCRBY" ) . arg( key) . arg( delta) . arg( member)
516
+ }
517
+
518
+ #[ doc="Intersect multiple sorted sets and store the resulting sorted set in
519
+ a new key using SUM as aggregation function." ]
520
+ fn zinterstore<K : ToRedisArgs >( dstkey: K , keys: & [ K ] ) {
521
+ cmd( "ZINTERSTORE" ) . arg( dstkey) . arg( keys. len( ) ) . arg( keys)
522
+ }
523
+
524
+ #[ doc="Intersect multiple sorted sets and store the resulting sorted set in
525
+ a new key using MIN as aggregation function." ]
526
+ fn zinterstore_min<K : ToRedisArgs >( dstkey: K , keys: & [ K ] ) {
527
+ cmd( "ZINTERSTORE" ) . arg( dstkey) . arg( keys. len( ) ) . arg( keys) . arg( "AGGREGATE" ) . arg( "MIN" )
528
+ }
529
+
530
+ #[ doc="Intersect multiple sorted sets and store the resulting sorted set in
531
+ a new key using MAX as aggregation function." ]
532
+ fn zinterstore_max<K : ToRedisArgs >( dstkey: K , keys: & [ K ] ) {
533
+ cmd( "ZINTERSTORE" ) . arg( dstkey) . arg( keys. len( ) ) . arg( keys) . arg( "AGGREGATE" ) . arg( "MAX" )
534
+ }
535
+
536
+ #[ doc="Count the number of members in a sorted set between a given lexicographical range." ]
537
+ fn zlexcount<K : ToRedisArgs , L : ToRedisArgs >( key: K , min: L , max: L ) {
538
+ cmd( "ZLEXCOUNT" ) . arg( key) . arg( min) . arg( max)
539
+ }
540
+
541
+ #[ doc="Return a range of members in a sorted set, by index" ]
542
+ fn zrange<K : ToRedisArgs >( key: K , start: int, stop: int) {
543
+ cmd( "ZRANGE" ) . arg( key) . arg( start) . arg( stop)
544
+ }
545
+
546
+ #[ doc="Return a range of members in a sorted set, by index with scores." ]
547
+ fn zrange_withscores<K : ToRedisArgs >( key: K , start: int, stop: int) {
548
+ cmd( "ZRANGE" ) . arg( key) . arg( start) . arg( stop) . arg( "WITHSCORES" )
549
+ }
550
+
551
+ #[ doc="Return a range of members in a sorted set, by lexicographical range." ]
552
+ fn zrangebylex<K : ToRedisArgs , M : ToRedisArgs , MM : ToRedisArgs >( key: K , min: M , max: MM ) {
553
+ cmd( "ZRANGEBYLEX" ) . arg( key) . arg( min) . arg( max)
554
+ }
555
+
556
+ #[ doc="Return a range of members in a sorted set, by lexicographical
557
+ range with offset and limit." ]
558
+ fn zrangebylex_limit<K : ToRedisArgs , M : ToRedisArgs , MM : ToRedisArgs >(
559
+ key: K , min: M , max: MM , offset: int, count: int) {
560
+ cmd( "ZRANGEBYLEX" ) . arg( key) . arg( min) . arg( max) . arg( "LIMIT" ) . arg( offset) . arg( count)
561
+ }
562
+
563
+ #[ doc="Return a range of members in a sorted set, by lexicographical range." ]
564
+ fn zrevrangebylex<K : ToRedisArgs , MM : ToRedisArgs , M : ToRedisArgs >( key: K , max: MM , min: M ) {
565
+ cmd( "ZREVRANGEBYLEX" ) . arg( key) . arg( max) . arg( min)
566
+ }
567
+
568
+ #[ doc="Return a range of members in a sorted set, by lexicographical
569
+ range with offset and limit." ]
570
+ fn zrevrangebylex_limit<K : ToRedisArgs , MM : ToRedisArgs , M : ToRedisArgs >(
571
+ key: K , max: MM , min: M , offset: int, count: int) {
572
+ cmd( "ZREVRANGEBYLEX" ) . arg( key) . arg( max) . arg( min) . arg( "LIMIT" ) . arg( offset) . arg( count)
573
+ }
574
+
575
+ #[ doc="Return a range of members in a sorted set, by score." ]
576
+ fn zrangebyscore<K : ToRedisArgs , M : ToRedisArgs , MM : ToRedisArgs >( key: K , min: M , max: MM ) {
577
+ cmd( "ZRANGEBYSCORE" ) . arg( key) . arg( min) . arg( max)
578
+ }
579
+
580
+ #[ doc="Return a range of members in a sorted set, by score with scores." ]
581
+ fn zrangebyscore_withscores<K : ToRedisArgs , M : ToRedisArgs , MM : ToRedisArgs >( key: K , min: M , max: MM ) {
582
+ cmd( "ZRANGEBYSCORE" ) . arg( key) . arg( min) . arg( max) . arg( "WITHSCORES" )
583
+ }
584
+
585
+ #[ doc="Return a range of members in a sorted set, by score with limit." ]
586
+ fn zrangebyscore_limit<K : ToRedisArgs , M : ToRedisArgs , MM : ToRedisArgs >
587
+ ( key: K , min: M , max: MM , offset: int, count: int) {
588
+ cmd( "ZRANGEBYSCORE" ) . arg( key) . arg( min) . arg( max) . arg( "LIMIT" ) . arg( offset) . arg( count)
589
+ }
590
+
591
+ #[ doc="Return a range of members in a sorted set, by score with limit with scores." ]
592
+ fn zrangebyscore_limit_withscores<K : ToRedisArgs , M : ToRedisArgs , MM : ToRedisArgs >
593
+ ( key: K , min: M , max: MM , offset: int, count: int) {
594
+ cmd( "ZRANGEBYSCORE" ) . arg( key) . arg( min) . arg( max) . arg( "WITHSCORES" )
595
+ . arg( "LIMIT" ) . arg( offset) . arg( count)
596
+ }
597
+
598
+ #[ doc="Determine the index of a member in a sorted set." ]
599
+ fn zrank<K : ToRedisArgs , M : ToRedisArgs >( key: K , member: M ) {
600
+ cmd( "ZRANK" ) . arg( key) . arg( member)
601
+ }
473
602
)
474
603
475
604
impl Commands for Connection { }
0 commit comments