Handle byte slice in Scan
Signed-off-by: Émile Ré <nemile.re@gmail.com>
This commit is contained in:
@@ -94,22 +94,28 @@ func (gid GID) Timestamp() time.Time {
|
||||
|
||||
// Scan implements the database/sql/driver.Scanner interface
|
||||
func (gid *GID) Scan(value interface{}) error {
|
||||
var str string
|
||||
switch v := value.(type) {
|
||||
case string:
|
||||
enc := base64.RawURLEncoding
|
||||
id, err := enc.DecodeString(v)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if len(id) != GIDSize {
|
||||
return fmt.Errorf("invalid length for GID: got %d, want %d", len(id), GIDSize)
|
||||
}
|
||||
|
||||
copy((*gid)[:], id)
|
||||
str = v
|
||||
case []byte:
|
||||
str = string(v)
|
||||
default:
|
||||
return fmt.Errorf("invalid type for GID: expected string, got %T", value)
|
||||
return fmt.Errorf("invalid type %T for GID", value)
|
||||
}
|
||||
|
||||
enc := base64.RawURLEncoding
|
||||
id, err := enc.DecodeString(str)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if len(id) != GIDSize {
|
||||
return fmt.Errorf("invalid length for GID: got %d, want %d", len(id), GIDSize)
|
||||
}
|
||||
|
||||
copy((*gid)[:], id)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -53,17 +53,23 @@ func (a *Addr) Scan(value any) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
var str string
|
||||
switch v := value.(type) {
|
||||
case string:
|
||||
parsed, err := ParseAddr(v)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
*a = parsed
|
||||
str = v
|
||||
case []byte:
|
||||
str = string(v)
|
||||
default:
|
||||
return fmt.Errorf("invalid type for mail.Addr: expected string, got %T", value)
|
||||
return fmt.Errorf("invalid type %T for mail.Addr", value)
|
||||
}
|
||||
|
||||
parsed, err := ParseAddr(str)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
*a = parsed
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user