77
88type StreamCmdable interface {
99 XAdd (ctx context.Context , a * XAddArgs ) * StringCmd
10+ XAckDel (ctx context.Context , stream string , group string , mode string , ids ... string ) * SliceCmd
1011 XDel (ctx context.Context , stream string , ids ... string ) * IntCmd
12+ XDelEx (ctx context.Context , stream string , mode string , ids ... string ) * SliceCmd
1113 XLen (ctx context.Context , stream string ) * IntCmd
1214 XRange (ctx context.Context , stream , start , stop string ) * XMessageSliceCmd
1315 XRangeN (ctx context.Context , stream , start , stop string , count int64 ) * XMessageSliceCmd
@@ -31,8 +33,12 @@ type StreamCmdable interface {
3133 XAutoClaimJustID (ctx context.Context , a * XAutoClaimArgs ) * XAutoClaimJustIDCmd
3234 XTrimMaxLen (ctx context.Context , key string , maxLen int64 ) * IntCmd
3335 XTrimMaxLenApprox (ctx context.Context , key string , maxLen , limit int64 ) * IntCmd
36+ XTrimMaxLenMode (ctx context.Context , key string , maxLen int64 , mode string ) * IntCmd
37+ XTrimMaxLenApproxMode (ctx context.Context , key string , maxLen , limit int64 , mode string ) * IntCmd
3438 XTrimMinID (ctx context.Context , key string , minID string ) * IntCmd
3539 XTrimMinIDApprox (ctx context.Context , key string , minID string , limit int64 ) * IntCmd
40+ XTrimMinIDMode (ctx context.Context , key string , minID string , mode string ) * IntCmd
41+ XTrimMinIDApproxMode (ctx context.Context , key string , minID string , limit int64 , mode string ) * IntCmd
3642 XInfoGroups (ctx context.Context , key string ) * XInfoGroupsCmd
3743 XInfoStream (ctx context.Context , key string ) * XInfoStreamCmd
3844 XInfoStreamFull (ctx context.Context , key string , count int ) * XInfoStreamFullCmd
@@ -54,6 +60,7 @@ type XAddArgs struct {
5460 // Approx causes MaxLen and MinID to use "~" matcher (instead of "=").
5561 Approx bool
5662 Limit int64
63+ Mode string
5764 ID string
5865 Values interface {}
5966}
@@ -81,6 +88,11 @@ func (c cmdable) XAdd(ctx context.Context, a *XAddArgs) *StringCmd {
8188 if a .Limit > 0 {
8289 args = append (args , "limit" , a .Limit )
8390 }
91+
92+ if a .Mode != "" {
93+ args = append (args , a .Mode )
94+ }
95+
8496 if a .ID != "" {
8597 args = append (args , a .ID )
8698 } else {
@@ -93,6 +105,16 @@ func (c cmdable) XAdd(ctx context.Context, a *XAddArgs) *StringCmd {
93105 return cmd
94106}
95107
108+ func (c cmdable ) XAckDel (ctx context.Context , stream string , group string , mode string , ids ... string ) * SliceCmd {
109+ args := []interface {}{"xackdel" , stream , group , mode , "ids" , len (ids )}
110+ for _ , id := range ids {
111+ args = append (args , id )
112+ }
113+ cmd := NewSliceCmd (ctx , args ... )
114+ _ = c (ctx , cmd )
115+ return cmd
116+ }
117+
96118func (c cmdable ) XDel (ctx context.Context , stream string , ids ... string ) * IntCmd {
97119 args := []interface {}{"xdel" , stream }
98120 for _ , id := range ids {
@@ -103,6 +125,16 @@ func (c cmdable) XDel(ctx context.Context, stream string, ids ...string) *IntCmd
103125 return cmd
104126}
105127
128+ func (c cmdable ) XDelEx (ctx context.Context , stream string , mode string , ids ... string ) * SliceCmd {
129+ args := []interface {}{"xdelex" , stream , mode , "ids" , len (ids )}
130+ for _ , id := range ids {
131+ args = append (args , id )
132+ }
133+ cmd := NewSliceCmd (ctx , args ... )
134+ _ = c (ctx , cmd )
135+ return cmd
136+ }
137+
106138func (c cmdable ) XLen (ctx context.Context , stream string ) * IntCmd {
107139 cmd := NewIntCmd (ctx , "xlen" , stream )
108140 _ = c (ctx , cmd )
@@ -375,6 +407,8 @@ func xClaimArgs(a *XClaimArgs) []interface{} {
375407 return args
376408}
377409
410+ // TODO: refactor xTrim, xTrimMode and the wrappers over the functions
411+
378412// xTrim If approx is true, add the "~" parameter, otherwise it is the default "=" (redis default).
379413// example:
380414//
@@ -418,6 +452,42 @@ func (c cmdable) XTrimMinIDApprox(ctx context.Context, key string, minID string,
418452 return c .xTrim (ctx , key , "minid" , true , minID , limit )
419453}
420454
455+ func (c cmdable ) xTrimMode (
456+ ctx context.Context , key , strategy string ,
457+ approx bool , threshold interface {}, limit int64 ,
458+ mode string ,
459+ ) * IntCmd {
460+ args := make ([]interface {}, 0 , 7 )
461+ args = append (args , "xtrim" , key , strategy )
462+ if approx {
463+ args = append (args , "~" )
464+ }
465+ args = append (args , threshold )
466+ if limit > 0 {
467+ args = append (args , "limit" , limit )
468+ }
469+ args = append (args , mode )
470+ cmd := NewIntCmd (ctx , args ... )
471+ _ = c (ctx , cmd )
472+ return cmd
473+ }
474+
475+ func (c cmdable ) XTrimMaxLenMode (ctx context.Context , key string , maxLen int64 , mode string ) * IntCmd {
476+ return c .xTrimMode (ctx , key , "maxlen" , false , maxLen , 0 , mode )
477+ }
478+
479+ func (c cmdable ) XTrimMaxLenApproxMode (ctx context.Context , key string , maxLen , limit int64 , mode string ) * IntCmd {
480+ return c .xTrimMode (ctx , key , "maxlen" , true , maxLen , limit , mode )
481+ }
482+
483+ func (c cmdable ) XTrimMinIDMode (ctx context.Context , key string , minID string , mode string ) * IntCmd {
484+ return c .xTrimMode (ctx , key , "minid" , false , minID , 0 , mode )
485+ }
486+
487+ func (c cmdable ) XTrimMinIDApproxMode (ctx context.Context , key string , minID string , limit int64 , mode string ) * IntCmd {
488+ return c .xTrimMode (ctx , key , "minid" , true , minID , limit , mode )
489+ }
490+
421491func (c cmdable ) XInfoConsumers (ctx context.Context , key string , group string ) * XInfoConsumersCmd {
422492 cmd := NewXInfoConsumersCmd (ctx , key , group )
423493 _ = c (ctx , cmd )
0 commit comments