mirror of
https://github.com/redis/go-redis.git
synced 2025-07-28 06:42:00 +03:00
feat: add Cmd.{String,Int,Float,Bool}Slice helpers and an example
This commit is contained in:
138
command.go
138
command.go
@ -216,7 +216,11 @@ func (cmd *Cmd) Text() (string, error) {
|
||||
if cmd.err != nil {
|
||||
return "", cmd.err
|
||||
}
|
||||
switch val := cmd.val.(type) {
|
||||
return toString(cmd.val)
|
||||
}
|
||||
|
||||
func toString(val interface{}) (string, error) {
|
||||
switch val := val.(type) {
|
||||
case string:
|
||||
return val, nil
|
||||
default:
|
||||
@ -244,7 +248,11 @@ func (cmd *Cmd) Int64() (int64, error) {
|
||||
if cmd.err != nil {
|
||||
return 0, cmd.err
|
||||
}
|
||||
switch val := cmd.val.(type) {
|
||||
return toInt64(cmd.val)
|
||||
}
|
||||
|
||||
func toInt64(val interface{}) (int64, error) {
|
||||
switch val := val.(type) {
|
||||
case int64:
|
||||
return val, nil
|
||||
case string:
|
||||
@ -259,7 +267,11 @@ func (cmd *Cmd) Uint64() (uint64, error) {
|
||||
if cmd.err != nil {
|
||||
return 0, cmd.err
|
||||
}
|
||||
switch val := cmd.val.(type) {
|
||||
return toUint64(cmd.val)
|
||||
}
|
||||
|
||||
func toUint64(val interface{}) (uint64, error) {
|
||||
switch val := val.(type) {
|
||||
case int64:
|
||||
return uint64(val), nil
|
||||
case string:
|
||||
@ -274,7 +286,11 @@ func (cmd *Cmd) Float32() (float32, error) {
|
||||
if cmd.err != nil {
|
||||
return 0, cmd.err
|
||||
}
|
||||
switch val := cmd.val.(type) {
|
||||
return toFloat32(cmd.val)
|
||||
}
|
||||
|
||||
func toFloat32(val interface{}) (float32, error) {
|
||||
switch val := val.(type) {
|
||||
case int64:
|
||||
return float32(val), nil
|
||||
case string:
|
||||
@ -293,7 +309,11 @@ func (cmd *Cmd) Float64() (float64, error) {
|
||||
if cmd.err != nil {
|
||||
return 0, cmd.err
|
||||
}
|
||||
switch val := cmd.val.(type) {
|
||||
return toFloat64(cmd.val)
|
||||
}
|
||||
|
||||
func toFloat64(val interface{}) (float64, error) {
|
||||
switch val := val.(type) {
|
||||
case int64:
|
||||
return float64(val), nil
|
||||
case string:
|
||||
@ -308,7 +328,11 @@ func (cmd *Cmd) Bool() (bool, error) {
|
||||
if cmd.err != nil {
|
||||
return false, cmd.err
|
||||
}
|
||||
switch val := cmd.val.(type) {
|
||||
return toBool(cmd.val)
|
||||
}
|
||||
|
||||
func toBool(val interface{}) (bool, error) {
|
||||
switch val := val.(type) {
|
||||
case int64:
|
||||
return val != 0, nil
|
||||
case string:
|
||||
@ -331,6 +355,108 @@ func (cmd *Cmd) Slice() ([]interface{}, error) {
|
||||
}
|
||||
}
|
||||
|
||||
func (cmd *Cmd) StringSlice() ([]string, error) {
|
||||
slice, err := cmd.Slice()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
ss := make([]string, len(slice))
|
||||
for i, iface := range slice {
|
||||
val, err := toString(iface)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
ss[i] = val
|
||||
}
|
||||
return ss, nil
|
||||
}
|
||||
|
||||
func (cmd *Cmd) Int64Slice() ([]int64, error) {
|
||||
slice, err := cmd.Slice()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
nums := make([]int64, len(slice))
|
||||
for i, iface := range slice {
|
||||
val, err := toInt64(iface)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
nums[i] = val
|
||||
}
|
||||
return nums, nil
|
||||
}
|
||||
|
||||
func (cmd *Cmd) Uint64Slice() ([]uint64, error) {
|
||||
slice, err := cmd.Slice()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
nums := make([]uint64, len(slice))
|
||||
for i, iface := range slice {
|
||||
val, err := toUint64(iface)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
nums[i] = val
|
||||
}
|
||||
return nums, nil
|
||||
}
|
||||
|
||||
func (cmd *Cmd) Float32Slice() ([]float32, error) {
|
||||
slice, err := cmd.Slice()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
floats := make([]float32, len(slice))
|
||||
for i, iface := range slice {
|
||||
val, err := toFloat32(iface)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
floats[i] = val
|
||||
}
|
||||
return floats, nil
|
||||
}
|
||||
|
||||
func (cmd *Cmd) Float64Slice() ([]float64, error) {
|
||||
slice, err := cmd.Slice()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
floats := make([]float64, len(slice))
|
||||
for i, iface := range slice {
|
||||
val, err := toFloat64(iface)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
floats[i] = val
|
||||
}
|
||||
return floats, nil
|
||||
}
|
||||
|
||||
func (cmd *Cmd) BoolSlice() ([]bool, error) {
|
||||
slice, err := cmd.Slice()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
bools := make([]bool, len(slice))
|
||||
for i, iface := range slice {
|
||||
val, err := toBool(iface)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
bools[i] = val
|
||||
}
|
||||
return bools, nil
|
||||
}
|
||||
|
||||
func (cmd *Cmd) readReply(rd *proto.Reader) (err error) {
|
||||
cmd.val, err = rd.ReadReply(sliceParser)
|
||||
return err
|
||||
|
Reference in New Issue
Block a user