2015-03-25 3 views
7

У меня много разных схем, но есть набор полей, которые содержит каждая схема. Мне было интересно, есть ли способ, чтобы другая схема расширила родительскую схему и наследовала ее поля. Например, это то, что я хочу:Расширение сообщений Protobuf

message Parent { 
    required string common1 = 0; 
    optional string common2 = 1; 
} 

message Child1 { // can we extend the Parent? 
    // I want common1, common2 to be fields here 
    required int c1 = 2; 
    required string c2 = 3; 
} 

message Child2 { // can we extend Parent? 
    // I want common1, common2 to be fields here 
    repeated int c3 = 2; 
    repeated string c4 = 3; 
} 

Такое, что Child1 и Child2 также содержат поля common1 и common2 (и, возможно, более) от Родителя.

Возможно ли это, и если да, то каким образом?

+0

Наследование не поддерживается, но как решение бедного человека, вы могли бы использовать вложенную конструкцию, где первое поле 'Child1' и' Child2' имеет тип «Parent». Чтобы получить доступ к полям в «базовом классе», вам нужно будет явно получить доступ к этому «родительскому» типу. –

+0

Есть также расширения. https://developers.google.com/protocol-buffers/docs/proto#extensions – engineerC

ответ

2

Это не точный ответ на ваш вопрос, но мы можем сделать что-то подобное для обмена общими параметрами.

message Child1 { 
    required int c1 = 2; 
    required string c2 = 3; 
} 

message Child2 { 
    required int c1 = 2; 
    required string c2 = 3; 
} 

message Request { 
    required string common1 = 0; 
    optional string common2 = 1; 
    oneof msg { Child1 c1 = 2; Child2 c2 = 3; } 

} 

Другой вариант заключается в использовании продлить ключевое слово

message Parent { 
    required string common1 = 0; 
    optional string common2 = 1; 
} 

message Child1 { 
    extend Parent 
    {  
     optional Child1 c1 = 100; 
    } 

    required int c1 = 2; 
    required string c2 = 3; 
} 
+4

расширение не поддерживается в протобуфере 3 –

Смежные вопросы