committed by
Ralf Haferkamp
parent
4ffb79b680
commit
96042752bb
+5
-2
@@ -332,7 +332,10 @@ func DialURLContext(ctx context.Context, rawurl string, options ...DialOption) (
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if u.Scheme != "redis" && u.Scheme != "rediss" {
|
||||
switch u.Scheme {
|
||||
case "redis", "rediss", "valkey", "valkeys":
|
||||
// valid scheme
|
||||
default:
|
||||
return nil, fmt.Errorf("invalid redis URL scheme: %s", u.Scheme)
|
||||
}
|
||||
|
||||
@@ -386,7 +389,7 @@ func DialURLContext(ctx context.Context, rawurl string, options ...DialOption) (
|
||||
return nil, fmt.Errorf("invalid database: %s", u.Path[1:])
|
||||
}
|
||||
|
||||
options = append(options, DialUseTLS(u.Scheme == "rediss"))
|
||||
options = append(options, DialUseTLS(u.Scheme == "rediss" || u.Scheme == "valkeys"))
|
||||
|
||||
return DialContext(ctx, "tcp", address, options...)
|
||||
}
|
||||
|
||||
+16
-3
@@ -477,7 +477,7 @@ var errScanStructValue = errors.New("redigo.ScanStruct: value must be non-nil po
|
||||
// ScanStruct uses exported field names to match values in the response. Use
|
||||
// 'redis' field tag to override the name:
|
||||
//
|
||||
// Field int `redis:"myName"`
|
||||
// Field int `redis:"myName"`
|
||||
//
|
||||
// Fields with the tag redis:"-" are ignored.
|
||||
//
|
||||
@@ -513,9 +513,9 @@ func ScanStruct(src []interface{}, dest interface{}) error {
|
||||
continue
|
||||
}
|
||||
|
||||
name, ok := src[i].([]byte)
|
||||
name, ok := convertToBulk(src[i])
|
||||
if !ok {
|
||||
return fmt.Errorf("redigo.ScanStruct: key %d not a bulk string value", i)
|
||||
return fmt.Errorf("redigo.ScanStruct: key %d not a bulk string value got type: %T", i, src[i])
|
||||
}
|
||||
|
||||
fs := ss.fieldSpec(name)
|
||||
@@ -530,6 +530,19 @@ func ScanStruct(src []interface{}, dest interface{}) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// convertToBulk converts src to a []byte if src is a string or bulk string
|
||||
// and returns true. Otherwise nil and false is returned.
|
||||
func convertToBulk(src interface{}) ([]byte, bool) {
|
||||
switch v := src.(type) {
|
||||
case []byte:
|
||||
return v, true
|
||||
case string:
|
||||
return []byte(v), true
|
||||
default:
|
||||
return nil, false
|
||||
}
|
||||
}
|
||||
|
||||
var (
|
||||
errScanSliceValue = errors.New("redigo.ScanSlice: dest must be non-nil pointer to a struct")
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user