package avro

import (
	
	

	
)

func createDefaultDecoder( *decoderContext,  *Field,  reflect2.Type) ValDecoder {
	 := .cfg
	 := func( any) ([]byte, error) {
		 := reflect2.TypeOf()
		if  == nil {
			 = reflect2.TypeOf((*null)(nil))
		}
		 := encoderOfType(newEncoderContext(), .Type(), )
		if .LikePtr() {
			 = &onePtrEncoder{}
		}
		 := .borrowWriter()
		defer .returnWriter()

		.Encode(reflect2.PtrOf(), )
		if .Error != nil {
			return nil, .Error
		}
		 := .Buffer()
		 := make([]byte, len())
		copy(, )

		return , nil
	}

	,  := .encodeDefault()
	if  != nil {
		return &errorDecoder{err: fmt.Errorf("decode default: %w", )}
	}
	return &defaultDecoder{
		data:    ,
		decoder: decoderOfType(, .Type(), ),
	}
}

type defaultDecoder struct {
	data    []byte
	decoder ValDecoder
}

// Decode implements ValDecoder.
func ( *defaultDecoder) ( unsafe.Pointer,  *Reader) {
	 := .cfg.borrowReader(.data)
	defer .cfg.returnReader()

	.decoder.Decode(, )
}

var _ ValDecoder = &defaultDecoder{}