Given that the enum in B is a superset of A. I don't think you need to
adjust any enum value.

On Wed, Apr 4, 2018 at 12:38 PM Shyam S R <[email protected]> wrote:

> Thanks @Bo for the comments-
>
> I fixed the message for clarify and for reference:
>
> message A {
>    enum foo {
>       value1 = 0;
>       value2 = 1;
>    }
>    int32 id = 1;
>    string name = 2;
>    foo type = 3;
>    optional NestedMsg1 msg = 4;
> }
>
> message NestedMsg1 {
>    int32 id = 1;
>    string name = 2;
> }
>
>
> message B {
>    enum foo {
>       value0 = 0;
>       value1 = 1;
>       value2 =2;
>    }
>    int32 id = 1;
>    string name = 2;
>    foo type = 3;
>    optional NestedMsg2 msg = 4;
> }
>
> message NestedMsg2 {
>    int32 id = 1;
>    string name = 2;
> }
>
> Given such a schema, i understand that it should be feasible to copy from
> type A to B through:
> void copy(A &in, B &out) {
>    out.ParseFromString(in.SerializeToString());
>    return;
> }
>
> The enum value in out may have to be adjusted though i believe-
>
> Thanks,
> Shyam
>
> On Wednesday, April 4, 2018 at 9:59:36 AM UTC-7, Bo Yang wrote:
>
>> 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.
>

-- 
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.

Reply via email to