fix(Type): make sure when checking if an inner type is Scanner we use pointers
This commit is contained in:
@@ -125,8 +125,15 @@ func (opt *Optional[T]) Scan(src interface{}) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// If T is a scanner
|
// If T is a scanner (Scan is usually implemented on pointers so we need a pointer)
|
||||||
if scanner, ok := any(opt.value).(sql.Scanner); ok {
|
var scanner sql.Scanner = nil
|
||||||
|
var ok bool = false
|
||||||
|
if reflect.TypeOf(opt.value).Kind() == reflect.Ptr {
|
||||||
|
scanner, ok = any(opt.value).(sql.Scanner)
|
||||||
|
} else {
|
||||||
|
scanner, ok = any(&opt.value).(sql.Scanner)
|
||||||
|
}
|
||||||
|
if ok {
|
||||||
if err := scanner.Scan(src); err != nil {
|
if err := scanner.Scan(src); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -151,8 +151,15 @@ func (res *Result[T]) Scan(src interface{}) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// If T is a scanner
|
// If T is a scanner (Scan is usually implemented on pointers so we need a pointer)
|
||||||
if scanner, ok := any(res.value).(sql.Scanner); ok {
|
var scanner sql.Scanner = nil
|
||||||
|
var ok bool = false
|
||||||
|
if reflect.TypeOf(res.value).Kind() == reflect.Ptr {
|
||||||
|
scanner, ok = any(res.value).(sql.Scanner)
|
||||||
|
} else {
|
||||||
|
scanner, ok = any(&res.value).(sql.Scanner)
|
||||||
|
}
|
||||||
|
if ok {
|
||||||
if err := scanner.Scan(src); err != nil {
|
if err := scanner.Scan(src); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user