3

I have a proto file defined as:

syntax = "proto3";

import "google/protobuf/struct.proto";

package generic.name;

message Message {
  uint32 increment = 1;
  google.protobuf.Value payload = 2;
}

I have figured out how to make this work if I swap the payload type from Value for Struct:

 struct = Struct()
 struct.update({"a": 1})
 msg = Message(payload=struct, increment=1)

However I cannot work out how to use the Value type in python. The python documentation for the protobuf Value field seems lacking compared to the other languages. Ultimately, all I want is to be able to have the payload data structure able to take a few different types (strings, ints, none, dict). What is the best way of achieving this?

1 Answers1

3

Here's an example:

from foo_pb2 import Bar

from google.protobuf.struct_pb2 import Struct


bar = Bar()

bar.payload.string_value="Freddie"

print(bar)
print(bar.SerializeToString())

bar.payload.bool_value=True

print(bar)
print(bar.SerializeToString())

# No need to initialize the Struct
bar.payload.struct_value.update({"foo":"bar"})
bar.payload.struct_value["baz"]=5

print(bar)
print(bar.SerializeToString())
DazWilkin
  • 32,823
  • 5
  • 47
  • 88