reflect/prototype: initial commit
Add the prototype package which provides constructors for
protoreflect.{Enum,Message,Extension}Type.
Switch all usages of the internal/prototype equivalent to the new package.
Switch all custom implementions of {Enum,Message}Type to the new package.
Change-Id: Ia9dae6fed4f2b90e55c123627044a7faf098c4b1
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/178438
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/internal/impl/legacy_hook.go b/internal/impl/legacy_hook.go
index f3ffe63..98eaf2f 100644
--- a/internal/impl/legacy_hook.go
+++ b/internal/impl/legacy_hook.go
@@ -4,14 +4,39 @@
package impl
-import pvalue "google.golang.org/protobuf/internal/value"
+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 pvalue.LegacyWrapper
+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 pvalue.LegacyWrapper) {
+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
+}