@@ -573,6 +573,10 @@ func (cmd *StatusCmd) Result() (string, error) {
573573 return cmd .val , cmd .err
574574}
575575
576+ func (cmd * StatusCmd ) Bytes () ([]byte , error ) {
577+ return util .StringToBytes (cmd .val ), cmd .err
578+ }
579+
576580func (cmd * StatusCmd ) String () string {
577581 return cmdString (cmd , cmd .val )
578582}
@@ -3783,6 +3787,65 @@ func (cmd *MapStringStringSliceCmd) readReply(rd *proto.Reader) error {
37833787 return nil
37843788}
37853789
3790+ // -----------------------------------------------------------------------
3791+ // MapStringInterfaceCmd represents a command that returns a map of strings to interface{}.
3792+ type MapMapStringInterfaceCmd struct {
3793+ baseCmd
3794+ val map [string ]interface {}
3795+ }
3796+
3797+ func NewMapMapStringInterfaceCmd (ctx context.Context , args ... interface {}) * MapMapStringInterfaceCmd {
3798+ return & MapMapStringInterfaceCmd {
3799+ baseCmd : baseCmd {
3800+ ctx : ctx ,
3801+ args : args ,
3802+ },
3803+ }
3804+ }
3805+
3806+ func (cmd * MapMapStringInterfaceCmd ) String () string {
3807+ return cmdString (cmd , cmd .val )
3808+ }
3809+
3810+ func (cmd * MapMapStringInterfaceCmd ) SetVal (val map [string ]interface {}) {
3811+ cmd .val = val
3812+ }
3813+
3814+ func (cmd * MapMapStringInterfaceCmd ) Result () (map [string ]interface {}, error ) {
3815+ return cmd .val , cmd .err
3816+ }
3817+
3818+ func (cmd * MapMapStringInterfaceCmd ) Val () map [string ]interface {} {
3819+ return cmd .val
3820+ }
3821+
3822+ func (cmd * MapMapStringInterfaceCmd ) readReply (rd * proto.Reader ) (err error ) {
3823+ n , err := rd .ReadArrayLen ()
3824+ if err != nil {
3825+ return err
3826+ }
3827+
3828+ data := make (map [string ]interface {}, n / 2 )
3829+ for i := 0 ; i < n ; i += 2 {
3830+ _ , err := rd .ReadArrayLen ()
3831+ if err != nil {
3832+ cmd .err = err
3833+ }
3834+ key , err := rd .ReadString ()
3835+ if err != nil {
3836+ cmd .err = err
3837+ }
3838+ value , err := rd .ReadString ()
3839+ if err != nil {
3840+ cmd .err = err
3841+ }
3842+ data [key ] = value
3843+ }
3844+
3845+ cmd .val = data
3846+ return nil
3847+ }
3848+
37863849//-----------------------------------------------------------------------
37873850
37883851type MapStringInterfaceSliceCmd struct {
@@ -4997,6 +5060,7 @@ type ClientInfo struct {
49975060 PSub int // number of pattern matching subscriptions
49985061 SSub int // redis version 7.0.3, number of shard channel subscriptions
49995062 Multi int // number of commands in a MULTI/EXEC context
5063+ Watch int // redis version 7.4 RC1, number of keys this client is currently watching.
50005064 QueryBuf int // qbuf, query buffer length (0 means no query pending)
50015065 QueryBufFree int // qbuf-free, free space of the query buffer (0 means the buffer is full)
50025066 ArgvMem int // incomplete arguments for the next command (already extracted from query buffer)
@@ -5149,6 +5213,8 @@ func parseClientInfo(txt string) (info *ClientInfo, err error) {
51495213 info .SSub , err = strconv .Atoi (val )
51505214 case "multi" :
51515215 info .Multi , err = strconv .Atoi (val )
5216+ case "watch" :
5217+ info .Watch , err = strconv .Atoi (val )
51525218 case "qbuf" :
51535219 info .QueryBuf , err = strconv .Atoi (val )
51545220 case "qbuf-free" :
0 commit comments