1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
// 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]{}
}
|