554f1e6fee
* Protobuf Modernization Remove direct usage of golang/protobuf in favor of google.golang.org/protobuf Marshallers (protobuf and json) needed some changes to account for different APIs. Moved to using the google.golang.org/protobuf/types/known/* for the well known types including replacing some custom Struct manipulation with whats available in the structpb well known type package. This also updates our devtools script to install protoc-gen-go from the right location so that files it generates conform to the correct interfaces. * Fix go-mod-tidy make target to work on all modules
37 lines
1.2 KiB
Go
37 lines
1.2 KiB
Go
package pbservice
|
|
|
|
import (
|
|
"google.golang.org/protobuf/types/known/structpb"
|
|
)
|
|
|
|
// ProtobufTypesStructToMapStringInterface converts a protobuf/structpb.Struct into a
|
|
// map[string]interface{}.
|
|
func ProtobufTypesStructToMapStringInterface(s *structpb.Struct) map[string]interface{} {
|
|
if s == nil {
|
|
return nil
|
|
}
|
|
return s.AsMap()
|
|
}
|
|
|
|
// MapStringInterfaceToProtobufTypesStruct converts a map[string]interface{} into a proto.Struct
|
|
func MapStringInterfaceToProtobufTypesStruct(m map[string]interface{}) *structpb.Struct {
|
|
if len(m) < 1 {
|
|
return nil
|
|
}
|
|
// TODO - handle the error better. It probably requires mog to be able to use alternative method signatures though
|
|
s, _ := structpb.NewStruct(m)
|
|
return s
|
|
}
|
|
|
|
// SliceToPBListValue converts a []interface{} into a proto.ListValue. It's used
|
|
// internally by MapStringInterfaceToProtobufTypesStruct when it encouters slices.
|
|
// TODO (remove usage of this struct in favor of structpb.NewListValue)
|
|
func SliceToPBListValue(s []interface{}) *structpb.ListValue {
|
|
if len(s) < 1 {
|
|
return nil
|
|
}
|
|
// TODO - handle the error better. It probably requires mog to use alt method signatures though
|
|
val, _ := structpb.NewList(s)
|
|
return val
|
|
}
|