Skip to content

Commit 237bad5

Browse files
authored
Add XAutoClaim command (#1780)
1 parent 6e4eb2e commit 237bad5

File tree

3 files changed

+186
-0
lines changed

3 files changed

+186
-0
lines changed

command.go

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1501,6 +1501,122 @@ func (cmd *XPendingExtCmd) readReply(rd *proto.Reader) error {
15011501

15021502
//------------------------------------------------------------------------------
15031503

1504+
type XAutoClaimCmd struct {
1505+
baseCmd
1506+
1507+
start string
1508+
val []XMessage
1509+
}
1510+
1511+
var _ Cmder = (*XAutoClaimCmd)(nil)
1512+
1513+
func NewXAutoClaimCmd(ctx context.Context, args ...interface{}) *XAutoClaimCmd {
1514+
return &XAutoClaimCmd{
1515+
baseCmd: baseCmd{
1516+
ctx: ctx,
1517+
args: args,
1518+
},
1519+
}
1520+
}
1521+
1522+
func (cmd *XAutoClaimCmd) Val() (messages []XMessage, start string) {
1523+
return cmd.val, cmd.start
1524+
}
1525+
1526+
func (cmd *XAutoClaimCmd) Result() (messages []XMessage, start string, err error) {
1527+
return cmd.val, cmd.start, cmd.err
1528+
}
1529+
1530+
func (cmd *XAutoClaimCmd) String() string {
1531+
return cmdString(cmd, cmd.val)
1532+
}
1533+
1534+
func (cmd *XAutoClaimCmd) readReply(rd *proto.Reader) error {
1535+
_, err := rd.ReadArrayReply(func(rd *proto.Reader, n int64) (interface{}, error) {
1536+
if n != 2 {
1537+
return nil, fmt.Errorf("got %d, wanted 2", n)
1538+
}
1539+
var err error
1540+
1541+
cmd.start, err = rd.ReadString()
1542+
if err != nil {
1543+
return nil, err
1544+
}
1545+
1546+
cmd.val, err = readXMessageSlice(rd)
1547+
if err != nil {
1548+
return nil, err
1549+
}
1550+
1551+
return nil, nil
1552+
})
1553+
return err
1554+
}
1555+
1556+
//------------------------------------------------------------------------------
1557+
1558+
type XAutoClaimJustIDCmd struct {
1559+
baseCmd
1560+
1561+
start string
1562+
val []string
1563+
}
1564+
1565+
var _ Cmder = (*XAutoClaimJustIDCmd)(nil)
1566+
1567+
func NewXAutoClaimJustIDCmd(ctx context.Context, args ...interface{}) *XAutoClaimJustIDCmd {
1568+
return &XAutoClaimJustIDCmd{
1569+
baseCmd: baseCmd{
1570+
ctx: ctx,
1571+
args: args,
1572+
},
1573+
}
1574+
}
1575+
1576+
func (cmd *XAutoClaimJustIDCmd) Val() (ids []string, start string) {
1577+
return cmd.val, cmd.start
1578+
}
1579+
1580+
func (cmd *XAutoClaimJustIDCmd) Result() (ids []string, start string, err error) {
1581+
return cmd.val, cmd.start, cmd.err
1582+
}
1583+
1584+
func (cmd *XAutoClaimJustIDCmd) String() string {
1585+
return cmdString(cmd, cmd.val)
1586+
}
1587+
1588+
func (cmd *XAutoClaimJustIDCmd) readReply(rd *proto.Reader) error {
1589+
_, err := rd.ReadArrayReply(func(rd *proto.Reader, n int64) (interface{}, error) {
1590+
if n != 2 {
1591+
return nil, fmt.Errorf("got %d, wanted 2", n)
1592+
}
1593+
var err error
1594+
1595+
cmd.start, err = rd.ReadString()
1596+
if err != nil {
1597+
return nil, err
1598+
}
1599+
1600+
nn, err := rd.ReadArrayLen()
1601+
if err != nil {
1602+
return nil, err
1603+
}
1604+
1605+
cmd.val = make([]string, nn)
1606+
for i := 0; i < nn; i++ {
1607+
cmd.val[i], err = rd.ReadString()
1608+
if err != nil {
1609+
return nil, err
1610+
}
1611+
}
1612+
1613+
return nil, nil
1614+
})
1615+
return err
1616+
}
1617+
1618+
//------------------------------------------------------------------------------
1619+
15041620
type XInfoConsumersCmd struct {
15051621
baseCmd
15061622
val []XInfoConsumer

commands.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1845,6 +1845,39 @@ func (c cmdable) XPendingExt(ctx context.Context, a *XPendingExtArgs) *XPendingE
18451845
return cmd
18461846
}
18471847

1848+
type XAutoClaimArgs struct {
1849+
Stream string
1850+
Group string
1851+
MinIdle time.Duration
1852+
Start string
1853+
Count int64
1854+
Consumer string
1855+
}
1856+
1857+
func (c cmdable) XAutoClaim(ctx context.Context, a *XAutoClaimArgs) *XAutoClaimCmd {
1858+
args := xAutoClaimArgs(ctx, a)
1859+
cmd := NewXAutoClaimCmd(ctx, args...)
1860+
_ = c(ctx, cmd)
1861+
return cmd
1862+
}
1863+
1864+
func (c cmdable) XAutoClaimJustID(ctx context.Context, a *XAutoClaimArgs) *XAutoClaimJustIDCmd {
1865+
args := xAutoClaimArgs(ctx, a)
1866+
args = append(args, "justid")
1867+
cmd := NewXAutoClaimJustIDCmd(ctx, args...)
1868+
_ = c(ctx, cmd)
1869+
return cmd
1870+
}
1871+
1872+
func xAutoClaimArgs(ctx context.Context, a *XAutoClaimArgs) []interface{} {
1873+
args := make([]interface{}, 0, 9)
1874+
args = append(args, "xautoclaim", a.Stream, a.Group, a.Consumer, formatMs(ctx, a.MinIdle), a.Start)
1875+
if a.Count > 0 {
1876+
args = append(args, "count", a.Count)
1877+
}
1878+
return args
1879+
}
1880+
18481881
type XClaimArgs struct {
18491882
Stream string
18501883
Group string

commands_test.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4386,6 +4386,43 @@ var _ = Describe("Commands", func() {
43864386
Expect(n).To(Equal(int64(3)))
43874387
})
43884388

4389+
It("should XAutoClaim", func() {
4390+
xca := &redis.XAutoClaimArgs{
4391+
Stream: "stream",
4392+
Group: "group",
4393+
Consumer: "consumer",
4394+
Start: "-",
4395+
Count: 2,
4396+
}
4397+
msgs, start, err := client.XAutoClaim(ctx, xca).Result()
4398+
Expect(err).NotTo(HaveOccurred())
4399+
Expect(start).To(Equal("2-0"))
4400+
Expect(msgs).To(Equal([]redis.XMessage{{
4401+
ID: "1-0",
4402+
Values: map[string]interface{}{"uno": "un"},
4403+
}, {
4404+
ID: "2-0",
4405+
Values: map[string]interface{}{"dos": "deux"},
4406+
}}))
4407+
4408+
xca.Start = start
4409+
msgs, start, err = client.XAutoClaim(ctx, xca).Result()
4410+
Expect(err).NotTo(HaveOccurred())
4411+
Expect(start).To(Equal("3-0"))
4412+
Expect(msgs).To(Equal([]redis.XMessage{{
4413+
ID: "2-0",
4414+
Values: map[string]interface{}{"dos": "deux"},
4415+
}, {
4416+
ID: "3-0",
4417+
Values: map[string]interface{}{"tres": "troix"},
4418+
}}))
4419+
4420+
ids, start, err := client.XAutoClaimJustID(ctx, xca).Result()
4421+
Expect(err).NotTo(HaveOccurred())
4422+
Expect(start).To(Equal("3-0"))
4423+
Expect(ids).To(Equal([]string{"2-0", "3-0"}))
4424+
})
4425+
43894426
It("should XClaim", func() {
43904427
msgs, err := client.XClaim(ctx, &redis.XClaimArgs{
43914428
Stream: "stream",

0 commit comments

Comments
 (0)