29 lines
523 B
Go
29 lines
523 B
Go
package pgdialect
|
|
|
|
import (
|
|
"fmt"
|
|
"reflect"
|
|
|
|
"github.com/uptrace/bun/schema"
|
|
)
|
|
|
|
func scanner(typ reflect.Type) schema.ScannerFunc {
|
|
if typ.Kind() == reflect.Interface {
|
|
return scanInterface
|
|
}
|
|
return schema.Scanner(typ)
|
|
}
|
|
|
|
func scanInterface(dest reflect.Value, src interface{}) error {
|
|
if dest.IsNil() {
|
|
dest.Set(reflect.ValueOf(src))
|
|
return nil
|
|
}
|
|
|
|
dest = dest.Elem()
|
|
if fn := scanner(dest.Type()); fn != nil {
|
|
return fn(dest, src)
|
|
}
|
|
return fmt.Errorf("bun: can't scan %#v into %s", src, dest.Type())
|
|
}
|