1
0
mirror of https://github.com/redis/go-redis.git synced 2025-07-28 06:42:00 +03:00

Add support for specifying bitcount unit as byte or bit, byte default (#2887)

* Add support for specifying bitcount unit as byte or bit, byte default

* Add bitcount test

* Test bitcount without unit specified

---------

Co-authored-by: wanghongwei5 <wanghongwei5@360.cn>
Co-authored-by: ofekshenawa <104765379+ofekshenawa@users.noreply.github.com>
This commit is contained in:
Nanthen Hale
2024-02-15 04:15:30 +08:00
committed by GitHub
parent 36bab9c8dc
commit 8d2a022fd5
2 changed files with 112 additions and 0 deletions

View File

@ -2,6 +2,7 @@ package redis
import (
"context"
"errors"
)
type BitMapCmdable interface {
@ -37,15 +38,28 @@ func (c cmdable) SetBit(ctx context.Context, key string, offset int64, value int
type BitCount struct {
Start, End int64
Unit string // BYTE(default) | BIT
}
const BitCountIndexByte string = "BYTE"
const BitCountIndexBit string = "BIT"
func (c cmdable) BitCount(ctx context.Context, key string, bitCount *BitCount) *IntCmd {
args := []interface{}{"bitcount", key}
if bitCount != nil {
if bitCount.Unit == "" {
bitCount.Unit = "BYTE"
}
if bitCount.Unit != BitCountIndexByte && bitCount.Unit != BitCountIndexBit {
cmd := NewIntCmd(ctx)
cmd.SetErr(errors.New("redis: invalid bitcount index"))
return cmd
}
args = append(
args,
bitCount.Start,
bitCount.End,
string(bitCount.Unit),
)
}
cmd := NewIntCmd(ctx, args...)