gorm/encoder.go
2018-12-10 16:06:56 -08:00

36 lines
742 B
Go

package gorm
// Encoder is a value encoding interface for complex field types
type Encoder interface {
EncodeField(*Scope, string) (interface{}, error)
DecodeField(scope *Scope, column string, value interface{}) error
}
// decoder defers decoding until necessary
type decoder struct {
Encoder
scope *Scope
column string
value interface{}
}
func newDecoder(encoder Encoder, scope *Scope, column string) *decoder {
return &decoder{
encoder,
scope,
column,
nil,
}
}
// Scan implements the sql.Scanner interface
func (d *decoder) Scan(src interface{}) error {
d.value = src
return nil
}
// Decode handles the decoding at a later time
func (d *decoder) Decode() error {
return d.DecodeField(d.scope, d.column, d.value)
}