blob: 9aed60cfaee7394cabd7b3a596fe0b575dfaa8f9 [file] [log] [blame]
// Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package a
import (
"reflect"
"sync"
)
type addressableValue struct{ reflect.Value }
type arshalers[Options, Coder any] struct {
fncVals []typedArshaler[Options, Coder]
fncCache sync.Map // map[reflect.Type]unmarshaler
}
type typedArshaler[Options, Coder any] struct {
typ reflect.Type
fnc func(Options, *Coder, addressableValue) error
}
type UnmarshalOptions1 struct {
// Unmarshalers is a list of type-specific unmarshalers to use.
Unmarshalers *arshalers[UnmarshalOptions1, Decoder1]
}
type Decoder1 struct {
}
func (a *arshalers[Options, Coder]) lookup(fnc func(Options, *Coder, addressableValue) error, t reflect.Type) func(Options, *Coder, addressableValue) error {
return fnc
}
func UnmarshalFuncV2[T any](fn func(UnmarshalOptions1, *Decoder1, T) error) *arshalers[UnmarshalOptions1, Decoder1] {
return &arshalers[UnmarshalOptions1, Decoder1]{}
}