Skip to content

Commit

Permalink
deps: fix backwards compatibility with encoding (#6965)
Browse files Browse the repository at this point in the history
  • Loading branch information
arvindbr8 authored Feb 5, 2024
1 parent 05b4a8b commit c2b50ee
Showing 1 changed file with 19 additions and 5 deletions.
24 changes: 19 additions & 5 deletions encoding/proto/proto.go
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -38,21 +39,34 @@ func init() {
type codec struct{}

func (codec) Marshal(v any) ([]byte, error) {
vv, ok := v.(proto.Message)
if !ok {
vv := messageV2Of(v)
if vv == nil {
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 {
return fmt.Errorf("failed to unmarshal, message is %T, want proto.Message", v)
vv := messageV2Of(v)
if vv == nil {
return fmt.Errorf("failed to marshal, message is %T, want proto.Message", v)
}

return proto.Unmarshal(data, vv)
}

func messageV2Of(v any) proto.Message {
switch v := v.(type) {
case protoadapt.MessageV1:
return protoadapt.MessageV2Of(v)
case protoadapt.MessageV2:
return v
}

return nil
}

func (codec) Name() string {
return Name
}

0 comments on commit c2b50ee

Please sign in to comment.