#include #include #include #include "optional.pb.h" int main() { int status = 0; uint8_t buf[256]; size_t msglen; COMMENT("Test encoding message with optional field") { pb_ostream_t stream = pb_ostream_from_buffer(buf, sizeof(buf)); TestMessage msg = TestMessage_init_zero; msg.has_opt_int = true; msg.opt_int = 99; msg.normal_int = 100; msg.opt_int2 = 101; TEST(pb_encode(&stream, TestMessage_fields, &msg)); msglen = stream.bytes_written; } COMMENT("Test decoding message with optional field") { pb_istream_t stream = pb_istream_from_buffer(buf, msglen); TestMessage msg = TestMessage_init_zero; /* These fields should be missing from the message * so the values wouldn't be overwritten. */ msg.opt_int2 = 5; msg.normal_int2 = 6; TEST(pb_decode_noinit(&stream, TestMessage_fields, &msg)); TEST(msg.has_opt_int); TEST(msg.opt_int == 99); TEST(msg.normal_int == 100); TEST(!msg.has_opt_int2); TEST(msg.opt_int2 == 5); TEST(msg.normal_int2 == 6); } return status; }