Thanks @Bo.

On Wednesday, April 4, 2018 at 1:45:01 PM UTC-7, Bo Yang wrote:
>
> 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] <javascript:>> 
> 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] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> 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