package avro

import (
	
	
	

	
)

func genericDecode( reflect2.Type,  ValDecoder,  *Reader) any {
	 := .UnsafeNew()
	.Decode(, )
	if .Error != nil {
		return nil
	}

	 := .UnsafeIndirect()
	if reflect2.IsNil() {
		return nil
	}
	return 
}

func genericReceiver( Schema) (reflect2.Type, error) {
	if .Type() == Ref {
		 = .(*RefSchema).Schema()
	}

	var  LogicalSchema
	,  := .(LogicalTypeSchema)
	if  {
		 = .Logical()
	}

	 := string(.Type())
	if  != nil {
		 += "." + string(.Type())
	}

	switch .Type() {
	case Null:
		return reflect2.TypeOf((*null)(nil)), nil
	case Boolean:
		var  bool
		return reflect2.TypeOf(), nil
	case Int:
		if  != nil {
			switch .Type() {
			case Date:
				var  time.Time
				return reflect2.TypeOf(), nil

			case TimeMillis:
				var  time.Duration
				return reflect2.TypeOf(), nil
			}
		}
		var  int
		return reflect2.TypeOf(), nil
	case Long:
		if  != nil {
			switch .Type() {
			case TimeMicros:
				var  time.Duration
				return reflect2.TypeOf(), nil
			case TimestampMillis:
				var  time.Time
				return reflect2.TypeOf(), nil
			case TimestampMicros:
				var  time.Time
				return reflect2.TypeOf(), nil
			case LocalTimestampMillis:
				var  time.Time
				return reflect2.TypeOf(), nil
			case LocalTimestampMicros:
				var  time.Time
				return reflect2.TypeOf(), nil
			}
		}
		var  int64
		return reflect2.TypeOf(), nil
	case Float:
		var  float32
		return reflect2.TypeOf(), nil
	case Double:
		var  float64
		return reflect2.TypeOf(), nil
	case String:
		var  string
		return reflect2.TypeOf(), nil
	case Bytes:
		if  != nil && .Type() == Decimal {
			var  *big.Rat
			return reflect2.TypeOf(), nil
		}
		var  []byte
		return reflect2.TypeOf(), nil
	case Record:
		var  map[string]any
		return reflect2.TypeOf(), nil
	case Enum:
		var  string
		return reflect2.TypeOf(), nil
	case Array:
		 := make([]any, 0)
		return reflect2.TypeOf(), nil
	case Map:
		var  map[string]any
		return reflect2.TypeOf(), nil
	case Union:
		var  map[string]any
		return reflect2.TypeOf(), nil
	case Fixed:
		 := .(*FixedSchema)
		 := .Logical()
		if  != nil {
			switch .Type() {
			case Duration:
				var  LogicalDuration
				return reflect2.TypeOf(), nil
			case Decimal:
				var  *big.Rat
				return reflect2.TypeOf(), nil
			}
		}
		 := byteSliceToArray(make([]byte, .Size()), .Size())
		return reflect2.TypeOf(), nil
	default:
		// This should not be possible.
		return nil, errors.New("dynamic receiver not found for schema " + )
	}
}