package types
import (
)
type Array struct {
v reflect.Value
append AppenderFunc
scan ScannerFunc
}
var (
_ ValueAppender = (*Array)(nil)
_ ValueScanner = (*Array)(nil)
)
func ( interface{}) *Array {
:= reflect.ValueOf()
if !.IsValid() {
panic(fmt.Errorf("pg: Array(nil)"))
}
return &Array{
v: ,
append: ArrayAppender(.Type()),
scan: ArrayScanner(.Type()),
}
}
func ( *Array) ( []byte, int) ([]byte, error) {
if .append == nil {
panic(fmt.Errorf("pg: Array(unsupported %s)", .v.Type()))
}
return .append(, .v, ), nil
}
func ( *Array) ( Reader, int) error {
if .scan == nil {
return fmt.Errorf("pg: Array(unsupported %s)", .v.Type())
}
if .v.Kind() != reflect.Ptr {
return fmt.Errorf("pg: Array(non-pointer %s)", .v.Type())
}
return .scan(.v.Elem(), , )
}
func ( *Array) () interface{} {
if .v.IsValid() {
return .v.Interface()
}
return nil
}