1) You misunderstood the enum definition in proto. field1, field2 and field3 don't define fields on message A and B. Instead, they define the enum value of enum foo. 2) If the nested message field have the same structure and same field number, it will still work. BTW, I just find your proto definition is not valid. Please take a look of the example, see how a valid proto looks like.
On Wed, Apr 4, 2018 at 9:46 AM Shyam S R <[email protected]> wrote: > By source values i meant the values of enums in "in" message: void copy(A > &in, B &out). The enum values in A and B differ by one element. > > By nested messages, > message A { > enum foo { > field1 = 0; > field2 = 1; > } > int32 id; > string name; > foo type; > NestedMsg1 msg1; > } > > message NestedMsg1 { > int32 id; > string name; > } > > If message B were to also have a similar structure, will > out.ParseFromString(in.SerializeToString()) take care of nested messages as > well ? > > I also explore CopyFrom(Message&) but not sure if it will work- > > Thanks, > Shyam > > On Wednesday, April 4, 2018 at 9:37:38 AM UTC-7, Bo Yang wrote: > >> I don't quite follow your question. >> What's the source values and nested messages you are referring to ? >> >> On Tue, Apr 3, 2018 at 5:52 PM Shyam S R <[email protected]> wrote: >> >>> thanks for the reply @Bo. Follow up: What happens to the enums, the >>> source values are maintained i suppose ? >>> >>> Does it work with nested messages also, in the sense, does >>> ParseFromString look for any message type information within the stream or >>> as long as the scalar types are good it parses ok ? >>> >>> On Tuesday, April 3, 2018 at 5:42:26 PM UTC-7, Bo Yang wrote: >>> >>>> The second copy looks correct to me. >>>> >>>> On Tue, Apr 3, 2018 at 5:26 PM Shyam S R <[email protected]> wrote: >>>> >>> Hi all, >>>>> >>>>> Is there a favored way to copy a protobuf message from one type to >>>>> another ? A little background: >>>>> >>>>> I have two messages for example: >>>>> message A { >>>>> enum foo { >>>>> field1 = 0; >>>>> field2 = 1; >>>>> } >>>>> int32 id; >>>>> string name; >>>>> foo type; >>>>> } >>>>> >>>>> message B { >>>>> enum foo { >>>>> field1 = 0; >>>>> field2 = 1; >>>>> field3 =2; >>>>> } >>>>> int32 id; >>>>> string name; >>>>> foo type; >>>>> } >>>>> >>>>> I have references to these messages and want to implement this method: >>>>> void copy(A &in, B &out) { >>>>> // in's contents need to be copied to out >>>>> } >>>>> >>>>> the only difference between A and B is the enum field and they are >>>>> named different. There could be more messages within the message types A >>>>> and B with the same fields, but only enum's having an extra field in B. >>>>> How >>>>> should i go about this ? >>>>> >>>>> Do the following options look feasible : >>>>> void copy(A &in, B &out) { >>>>> // in's contents need to be copied to out >>>>> cast in to type B >>>>> out = in; >>>>> } >>>>> >>>>> void copy(A &in, B &out) { >>>>> // in's contents need to be copied to out >>>>> Use in.SerializeAsString() and pipe it to out.ParseFromString() >>>>> } >>>>> >>>>> Appreciate the community's help! >>>>> >>>>> Thanks! >>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "Protocol Buffers" group. >>>>> >>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to [email protected]. >>>>> To post to this group, send email to [email protected]. >>>> >>>> >>>>> Visit this group at https://groups.google.com/group/protobuf. >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Protocol Buffers" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> To post to this group, send email to [email protected]. >>> Visit this group at https://groups.google.com/group/protobuf. >>> For more options, visit https://groups.google.com/d/optout. >>> >> -- > You received this message because you are subscribed to the Google Groups > "Protocol Buffers" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at https://groups.google.com/group/protobuf. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/protobuf. For more options, visit https://groups.google.com/d/optout.
