| // 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]{} | |
| } |