package avro
import (
"fmt"
"unsafe"
"github.com/modern-go/reflect2"
)
func createDefaultDecoder(d *decoderContext , field *Field , typ reflect2 .Type ) ValDecoder {
cfg := d .cfg
fn := func (def any ) ([]byte , error ) {
defaultType := reflect2 .TypeOf (def )
if defaultType == nil {
defaultType = reflect2 .TypeOf ((*null )(nil ))
}
defaultEncoder := encoderOfType (newEncoderContext (cfg ), field .Type (), defaultType )
if defaultType .LikePtr () {
defaultEncoder = &onePtrEncoder {defaultEncoder }
}
w := cfg .borrowWriter ()
defer cfg .returnWriter (w )
defaultEncoder .Encode (reflect2 .PtrOf (def ), w )
if w .Error != nil {
return nil , w .Error
}
b := w .Buffer ()
data := make ([]byte , len (b ))
copy (data , b )
return data , nil
}
b , err := field .encodeDefault (fn )
if err != nil {
return &errorDecoder {err : fmt .Errorf ("decode default: %w" , err )}
}
return &defaultDecoder {
data : b ,
decoder : decoderOfType (d , field .Type (), typ ),
}
}
type defaultDecoder struct {
data []byte
decoder ValDecoder
}
func (d *defaultDecoder ) Decode (ptr unsafe .Pointer , r *Reader ) {
rr := r .cfg .borrowReader (d .data )
defer r .cfg .returnReader (rr )
d .decoder .Decode (ptr , rr )
}
var _ ValDecoder = &defaultDecoder {}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .