fix(Type): make sure when checking if an inner type is Scanner we use pointers

This commit is contained in:
2025-01-05 22:23:51 +01:00
parent 7014f8d0ff
commit 4855e19fb3
2 changed files with 18 additions and 4 deletions

View File

@@ -125,8 +125,15 @@ func (opt *Optional[T]) Scan(src interface{}) error {
return nil
}
// If T is a scanner
if scanner, ok := any(opt.value).(sql.Scanner); ok {
// If T is a scanner (Scan is usually implemented on pointers so we need a pointer)
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 {
return err
}

View File

@@ -151,8 +151,15 @@ func (res *Result[T]) Scan(src interface{}) error {
return nil
}
// If T is a scanner
if scanner, ok := any(res.value).(sql.Scanner); ok {
// If T is a scanner (Scan is usually implemented on pointers so we need a pointer)
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 {
return err
}