We have the following protobuf definition
message SubMessage {
optional string var_1 = 1;
repeated string var_2 = 2;
}
message MainMessage {
repeated Foo1 foo_1 = 1;
repeated Foo2 foo_2 = 2;
optional SubMessage foo_3 = 6;
}
When trying to merge this subproto as part of the main proto
proto::MainMessage main_message_proto;
proto::SubMessage submessage_proto;
...
main_message_proto.MergeFrom(submessage_proto);
The following error occurs:
Tried to merge messages of different types
What's the correct function to merge the information of the submessage as a field of the main message?
MergeFrom
merges two messages of the same type. For example, if you had one MainMessage
with its foo_1
field set and another with its foo_2
field set, you could merge them together and the result would be a message with both the foo_1
and foo_2
fields set.
But that's not what you have here. You have a MainMessage
and want to merge its SubMessage
field with another SubMessage
. To do that you need to call MergeMessage
on foo_3
:
main_message_proto.mutable_foo_3()->MergeFrom(submessage_proto);
If foo_3
is currently empty, then there's no need to use MergeFrom
. Simple assignment will do in that case:
*main_message_proto.mutable_foo_3() = submessage_proto;