Skip to content

Commit

Permalink
Support resp 2
Browse files Browse the repository at this point in the history
  • Loading branch information
ofekshenawa committed Jun 24, 2024
1 parent b34680f commit 0809062
Show file tree
Hide file tree
Showing 4 changed files with 1,363 additions and 440 deletions.
59 changes: 59 additions & 0 deletions command.go
Original file line number Diff line number Diff line change
Expand Up @@ -3787,6 +3787,65 @@ func (cmd *MapStringStringSliceCmd) readReply(rd *proto.Reader) error {
return nil
}

// -----------------------------------------------------------------------
// MapStringInterfaceCmd represents a command that returns a map of strings to interface{}.
type MapMapStringInterfaceCmd struct {
baseCmd
val map[string]interface{}
}

func NewMapMapStringInterfaceCmd(ctx context.Context, args ...interface{}) *MapMapStringInterfaceCmd {
return &MapMapStringInterfaceCmd{
baseCmd: baseCmd{
ctx: ctx,
args: args,
},
}
}

func (cmd *MapMapStringInterfaceCmd) String() string {
return cmdString(cmd, cmd.val)
}

func (cmd *MapMapStringInterfaceCmd) SetVal(val map[string]interface{}) {
cmd.val = val
}

func (cmd *MapMapStringInterfaceCmd) Result() (map[string]interface{}, error) {
return cmd.val, cmd.err
}

func (cmd *MapMapStringInterfaceCmd) Val() map[string]interface{} {
return cmd.val
}

func (cmd *MapMapStringInterfaceCmd) readReply(rd *proto.Reader) (err error) {
n, err := rd.ReadArrayLen()
if err != nil {
return err
}

data := make(map[string]interface{}, n/2)
for i := 0; i < n; i += 2 {
_, err := rd.ReadArrayLen()
if err != nil {
err = cmd.err

Check failure on line 3832 in command.go

View workflow job for this annotation

GitHub Actions / lint

ineffectual assignment to err (ineffassign)
}
key, err := rd.ReadString()
if err != nil {
err = cmd.err

Check failure on line 3836 in command.go

View workflow job for this annotation

GitHub Actions / lint

ineffectual assignment to err (ineffassign)
}
value, err := rd.ReadString()
if err != nil {
err = cmd.err

Check failure on line 3840 in command.go

View workflow job for this annotation

GitHub Actions / lint

ineffectual assignment to err (ineffassign)
}
data[key] = value
}

cmd.val = data
return nil
}

//-----------------------------------------------------------------------

type MapStringInterfaceSliceCmd struct {
Expand Down
45 changes: 45 additions & 0 deletions internal/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package internal
import (
"context"
"net"
"strconv"
"strings"
"time"

Expand Down Expand Up @@ -81,3 +82,47 @@ func GetAddr(addr string) string {
}
return net.JoinHostPort(addr[:ind], addr[ind+1:])
}

func ToInteger(val interface{}) int {
switch v := val.(type) {
case int:
return v
case int64:
return int(v)
case string:
i, _ := strconv.Atoi(v)
return i
default:
return 0
}
}

func ToFloat(val interface{}) float64 {
switch v := val.(type) {
case float64:
return v
case string:
f, _ := strconv.ParseFloat(v, 64)
return f
default:
return 0.0
}
}

func ToString(val interface{}) string {
if str, ok := val.(string); ok {
return str
}
return ""
}

func ToStringSlice(val interface{}) []string {
if arr, ok := val.([]interface{}); ok {
result := make([]string, len(arr))
for i, v := range arr {
result[i] = ToString(v)
}
return result
}
return nil
}
Loading

0 comments on commit 0809062

Please sign in to comment.