Skip to content

Commit

Permalink
refactor marshalling funcs for anypb.Any
Browse files Browse the repository at this point in the history
- move marshalling funcs for anypb.Any from containerd/containerd/protobuf to typeurl

Signed-off-by: Akhil Mohan <akhilerm@gmail.com>
  • Loading branch information
akhilerm committed Jun 22, 2024
1 parent 30bb83c commit b92ed61
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 0 deletions.
26 changes: 26 additions & 0 deletions types.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (
gogoproto "github.com/gogo/protobuf/proto"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/reflect/protoregistry"
"google.golang.org/protobuf/types/known/anypb"
)

var (
Expand Down Expand Up @@ -196,6 +197,31 @@ func UnmarshalToByTypeURL(typeURL string, value []byte, out interface{}) error {
return err
}

// FromAny converts typeurl.Any to google.golang.org/protobuf/types/known/anypb.Any.
func FromAny(from Any) *anypb.Any {
if from == nil {
return nil
}

if pbany, ok := from.(*anypb.Any); ok {
return pbany
}

return &anypb.Any{
TypeUrl: from.GetTypeUrl(),
Value: from.GetValue(),
}
}

// MarshalAnyToProto converts an arbitrary interface to google.golang.org/protobuf/types/known/anypb.Any.
func MarshalAnyToProto(from interface{}) (*anypb.Any, error) {
anyType, err := MarshalAny(from)
if err != nil {
return nil, err
}
return FromAny(anyType), nil
}

func unmarshal(typeURL string, value []byte, v interface{}) (interface{}, error) {
t, err := getTypeByUrl(typeURL)
if err != nil {
Expand Down
7 changes: 7 additions & 0 deletions types_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,13 @@ func TestUnmarshalToInvalid(t *testing.T) {
}
}

func TestFromAny(t *testing.T) {
actual := FromAny(nil)
if actual != nil {
t.Fatalf("expected nil, got %v", actual)
}
}

func TestIs(t *testing.T) {
clear()
Register(&test{}, "test")
Expand Down

0 comments on commit b92ed61

Please sign in to comment.