Я связываюсь между встроенным устройством, которое использует nanopb, и настольным компьютером P C, который использует protobuf- c, но при синтаксическом анализе закодированного сообщения появляется ошибка. Встроенное устройство отправляет сообщение «Ответ» с необязательным полем другого типа сообщения (ResponseContent). Другое сообщение имеет обязательные поля. Вот определение сообщения
syntax = "proto2";
package Message;
message Response
{
enum RESPONSE_TYPES
{
OK = 0;
ERROR = 1;
BUSY = 2;
STATUS = 3;
}
required RESPONSE_TYPES type = 1;
optional ResponseContent response_content = 2;
}
message ResponseContent
{
enum CONTENT_TYPES
{
DIN = 0;
DOUT = 1;
AIN = 2;
AOUT = 3;
}
required CONTENT_TYPES type = 1;
oneof result
{
Din din = 21;
Dout dout = 22;
Ain ain = 23;
Aout aout = 24;
}
}
message Din
{
required bool state = 1;
}
message Dout
{
required bool ack = 1;
}
message Ain
{
required float val = 1;
}
message Aout
{
required bytes payload = 1;
}
Почему появляется ошибка «пропущены обязательные поля», когда тип ResponseContent в сообщении ответа является необязательным, а для параметра has_response_content установлено значение false ? примечание: очевидно, что это происходит с * bool ParseFromArray (const void * data, int size) *, а не с * bool ParsePartialFromArray (const void * data, int size) *