From 24902d874d42b9a84d9b3970d44971886d90b3a2 Mon Sep 17 00:00:00 2001 From: Arvind Bright Date: Mon, 5 Feb 2024 14:20:02 -0800 Subject: [PATCH] deps: fix backwards compatibility with encoding --- encoding/proto/proto.go | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/encoding/proto/proto.go b/encoding/proto/proto.go index f34f6e65f0e..7cc1f5211b9 100644 --- a/encoding/proto/proto.go +++ b/encoding/proto/proto.go @@ -25,6 +25,7 @@ import ( "google.golang.org/grpc/encoding" "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/protoadapt" ) // Name is the name registered for the proto compressor. @@ -38,18 +39,30 @@ func init() { type codec struct{} func (codec) Marshal(v any) ([]byte, error) { - vv, ok := v.(proto.Message) - if !ok { + var vv proto.Message + switch v := v.(type) { + case protoadapt.MessageV1: + vv = protoadapt.MessageV2Of(v) + case protoadapt.MessageV2: + vv = v + default: return nil, fmt.Errorf("failed to marshal, message is %T, want proto.Message", v) } + return proto.Marshal(vv) } func (codec) Unmarshal(data []byte, v any) error { - vv, ok := v.(proto.Message) - if !ok { + var vv proto.Message + switch v := v.(type) { + case protoadapt.MessageV1: + vv = protoadapt.MessageV2Of(v) + case protoadapt.MessageV2: + vv = v + default: return fmt.Errorf("failed to unmarshal, message is %T, want proto.Message", v) } + return proto.Unmarshal(data, vv) }