Hi,
Thanks for the suggestions below. I agree with you that these approaches
address most of the real life scenarios. What I am really looking for is
more of a syntactic sugar. In my case, I want to avoid any kind of nesting
as a personal preference. I just want to avoid copy pasting same members at
multiple places and have the overhead of keeping them updated everywhere.
I don't even mind if we had a certain kind of preprocessor to achieve this
i.e.
#define common_fields required int32 a; \
required int32 b; \
message msg1 {
common_fields;
required int32 c;
}
message msg2 {
common_fields;
required int32 d;
}
Does it make sense?
On Friday, October 21, 2016 at 1:42:36 AM UTC+5:30, Marcelo Cantos wrote:
>
> It probably wouldn’t be difficult to implement, but it’s not, afaik, a
> design goal for protocol buffers because it is almost never (if ever)
> necessary.
>
> There are two composition approaches available, depending on what your
> needs are. Contain the common stuff:
>
> message Common {
> required string account = 1;
> required string symbol = 2;
> }
> message MSG1 {
> required common = 1
> }
> message MSG2 {
> required common = 1
> required int32 id = 2;
> }
>
> Or contain the variable stuff:
>
> message MSG {
> required string account = 1;
> required string symbol = 2;
> optional Extra1 extra1 = 3;
> optional Extra2 extra2 = 4;
>
> message Extra1 {
> required int32 id = 1;
> }
>
> message Extra2 {
> required string foo = 1;
> }
> }
>
> with proto3, you can do slightly better:
>
> message MSG {
> string account = 1;
> string symbol = 2;
> oneof extra { Extra1 extra1 = 3; Extra2 extra2 = 4;
> }
>
> message Extra1 {
> int32 id = 1;
> }
>
> message Extra2 {
> string foo = 1;
> }
> }
>
> If composition is not what you want, then why not? What real-world problem
> do you have that cannot be effectively solved with one of the above
> strategies?
>
> On Thursday, 20 October 2016 17:50:22 UTC+11, Saurabh Kumar wrote:
>
> Understood but this is not what I wanted in the first place.
>>
>> Does someone has any idea about what makes it difficult to implement
>> this? Also, is there a clever way to have the same behaviour?
>> Basically, here I want to avoid copy pasting same fields over and over
>> again (makes code less maintainable).
>>
>> Any ideas are welcome.
>>
>> On Thursday, October 20, 2016 at 1:33:04 AM UTC+5:30, Feng Xiao wrote:
>>>
>>> I meant something like:
>>>
>>> message Header {
>>> string account = 1;
>>> string symbol = 1;
>>> }
>>>
>>> message Msg1 {
>>> Header header = 1;
>>> ...
>>> }
>>>
>>> message Msg2 {
>>> Header header = 1;
>>> ...
>>> }
>>>
>>> On Wed, Oct 19, 2016 at 12:42 PM, Saurabh Kumar <[email protected]>
>>> wrote:
>>>
>>>> Thanks for the reply. What exactly do you mean by common header?
>>>>
>>>> On Thu, 20 Oct 2016 at 1:06 AM, Feng Xiao <[email protected]> wrote:
>>>>
>>>>>
>>>>>
>>>>> On Wed, Oct 19, 2016 at 4:03 AM, Saurabh Kumar <[email protected]>
>>>>> wrote:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> This question is regarding inheritance in protobuf C++ library. I
>>>>>> will explain what I am looking for with a concrete example.
>>>>>>
>>>>>> I have this message definition:
>>>>>>
>>>>>> message MSG1
>>>>>> {
>>>>>> required string account = 0;
>>>>>> required string symbol = 1;
>>>>>> }
>>>>>>
>>>>>> Now I want to extend this message and define a new message like this:
>>>>>> message MSG2
>>>>>> {
>>>>>> required string account = 0;
>>>>>> required string symbol = 1;
>>>>>> required int32 id = 2;
>>>>>> }
>>>>>>
>>>>>> You will notice that first two fields of MSG2 are exactly same as
>>>>>> MSG1 (they are intended to be like that). But here I had to copy paste
>>>>>> the
>>>>>> common fields again.
>>>>>> Can I do something like this?
>>>>>>
>>>>>> message MSG2 extends MSG1
>>>>>> {
>>>>>> required int32 id = 2;
>>>>>> }
>>>>>>
>>>>>> I have already thought about using it like:
>>>>>> message MSG2
>>>>>> {
>>>>>> required MSG1 msg1 = 0;
>>>>>> required int32 id = 2;
>>>>>> }
>>>>>> But this is not really what I want.
>>>>>>
>>>>>> What's the best way to achieve this?
>>>>>>
>>>>> Protobuf doesn't support inheritance. Having a common header and using
>>>>> composition is the best solution.
>>>>>
>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>> Saurabh
>>>>>>
>>>>> --
>>>>>> 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.