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