blob: 98eaf2f519cf289d6678ad11bbff2b27cb915f33 [file] [log] [blame]
// Copyright 2018 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 impl
import (
"reflect"
pvalue "google.golang.org/protobuf/internal/value"
pref "google.golang.org/protobuf/reflect/protoreflect"
piface "google.golang.org/protobuf/runtime/protoiface"
)
// TODO: Add a default LegacyWrapper that panics with a more helpful message?
var legacyWrapper LegacyWrapper
// RegisterLegacyWrapper registers a set of constructor functions that are
// called when a legacy enum or message is encountered that does not natively
// support the protobuf reflection APIs.
func RegisterLegacyWrapper(w LegacyWrapper) {
legacyWrapper = w
}
// LegacyWrapper is a set of wrapper methods that wraps legacy v1 Go types
// to implement the v2 reflection APIs.
type LegacyWrapper interface {
NewConverter(reflect.Type, pref.Kind) pvalue.Converter
EnumOf(interface{}) pref.Enum
EnumTypeOf(interface{}) pref.EnumType
EnumDescriptorOf(interface{}) pref.EnumDescriptor
MessageOf(interface{}) pref.Message
MessageTypeOf(interface{}) pref.MessageType
MessageDescriptorOf(interface{}) pref.MessageDescriptor
// TODO: Remove these eventually.
// See the TODOs in internal/impl/legacy_extension.go.
ExtensionDescFromType(pref.ExtensionType) *piface.ExtensionDescV1
ExtensionTypeFromDesc(*piface.ExtensionDescV1) pref.ExtensionType
}