* max_size:16
* max_count:5
-
+*.*fbytes fixed_length:true max_size:4
required SubMessage req_submsg = 16;
required MyEnum req_enum = 17;
required EmptyMessage req_emptymsg = 18;
-
+ required bytes req_fbytes = 19;
repeated int32 rep_int32 = 21 [packed = true];
repeated int64 rep_int64 = 22 [packed = true];
repeated SubMessage rep_submsg = 36;
repeated MyEnum rep_enum = 37 [packed = true];
repeated EmptyMessage rep_emptymsg = 38;
+ repeated bytes rep_fbytes = 39;
optional int32 opt_int32 = 41 [default = 4041];
optional int64 opt_int64 = 42 [default = 4042];
optional SubMessage opt_submsg = 56;
optional MyEnum opt_enum = 57 [default = Second];
optional EmptyMessage opt_emptymsg = 58;
+ optional bytes opt_fbytes = 59 [default = "4059"];
oneof oneof
{
- SubMessage oneof_msg1 = 59;
- EmptyMessage oneof_msg2 = 60;
+ SubMessage oneof_msg1 = 60;
+ EmptyMessage oneof_msg2 = 61;
}
// Check that extreme integer values are handled correctly
TEST(alltypes.req_submsg.substuff2 == 1016);
TEST(alltypes.req_submsg.substuff3 == 3);
TEST(alltypes.req_enum == MyEnum_Truth);
+ TEST(memcmp(alltypes.req_fbytes, "1019", 4) == 0);
TEST(alltypes.rep_int32_count == 5 && alltypes.rep_int32[4] == -2001 && alltypes.rep_int32[0] == 0);
TEST(alltypes.rep_int64_count == 5 && alltypes.rep_int64[4] == -2002 && alltypes.rep_int64[0] == 0);
TEST(alltypes.rep_enum_count == 5 && alltypes.rep_enum[4] == MyEnum_Truth && alltypes.rep_enum[0] == MyEnum_Zero);
TEST(alltypes.rep_emptymsg_count == 5);
+ TEST(alltypes.rep_fbytes_count == 5);
+ TEST(alltypes.rep_fbytes[0][0] == 0 && alltypes.rep_fbytes[0][3] == 0);
+ TEST(memcmp(alltypes.rep_fbytes[4], "2019", 4) == 0);
if (mode == 0)
{
TEST(alltypes.has_opt_enum == false);
TEST(alltypes.opt_enum == MyEnum_Second);
TEST(alltypes.has_opt_emptymsg == false);
+ TEST(alltypes.has_opt_fbytes == false);
+ TEST(memcmp(alltypes.opt_fbytes, "4059", 4) == 0);
TEST(alltypes.which_oneof == 0);
}
TEST(alltypes.has_opt_enum == true);
TEST(alltypes.opt_enum == MyEnum_Truth);
TEST(alltypes.has_opt_emptymsg == true);
+ TEST(alltypes.has_opt_fbytes == true);
+ TEST(memcmp(alltypes.opt_fbytes, "3059", 4) == 0);
TEST(alltypes.which_oneof == AllTypes_oneof_msg1_tag);
TEST(strcmp(alltypes.oneof.oneof_msg1.substuff1, "4059") == 0);
strcpy(alltypes.req_submsg.substuff1, "1016");
alltypes.req_submsg.substuff2 = 1016;
alltypes.req_enum = MyEnum_Truth;
+ memcpy(alltypes.req_fbytes, "1019", 4);
alltypes.rep_int32_count = 5; alltypes.rep_int32[4] = -2001;
alltypes.rep_int64_count = 5; alltypes.rep_int64[4] = -2002;
alltypes.rep_enum_count = 5; alltypes.rep_enum[4] = MyEnum_Truth;
alltypes.rep_emptymsg_count = 5;
+ alltypes.rep_fbytes_count = 5;
+ memcpy(alltypes.rep_fbytes[4], "2019", 4);
+
alltypes.req_limits.int32_min = INT32_MIN;
alltypes.req_limits.int32_max = INT32_MAX;
alltypes.req_limits.uint32_min = 0;
alltypes.has_opt_enum = true;
alltypes.opt_enum = MyEnum_Truth;
alltypes.has_opt_emptymsg = true;
+ alltypes.has_opt_fbytes = true;
+ memcpy(alltypes.opt_fbytes, "3059", 4);
alltypes.which_oneof = AllTypes_oneof_msg1_tag;
strcpy(alltypes.oneof.oneof_msg1.substuff1, "4059");
AllTypes.* type:FT_CALLBACK
SubMessage.substuff1 max_size:16
AllTypes.oneof no_unions:true
+
+# With FT_CALLBACK, these options should get ignored
+*.*fbytes fixed_length:true max_size:4
+
SubMessage oneof_msg1 = {"4059", 4059};
/* Bind callbacks for required fields */
- AllTypes alltypes;
-
- /* Fill with garbage to better detect initialization errors */
- memset(&alltypes, 0xAA, sizeof(alltypes));
- alltypes.extensions = 0;
+ AllTypes alltypes = AllTypes_init_zero;
alltypes.req_int32.funcs.decode = &read_varint;
alltypes.req_int32.arg = (void*)-1001;
alltypes.req_emptymsg.funcs.encode = &write_emptymsg;
+ alltypes.req_fbytes.funcs.encode = &write_string;
+ alltypes.req_fbytes.arg = "1019";
+
/* Bind callbacks for repeated fields */
alltypes.rep_int32.funcs.encode = &write_repeated_varint;
alltypes.rep_int32.arg = (void*)-2001;
alltypes.rep_emptymsg.funcs.encode = &write_repeated_emptymsg;
+ alltypes.rep_fbytes.funcs.encode = &write_repeated_string;
+ alltypes.rep_fbytes.arg = "2019";
+
alltypes.req_limits.funcs.encode = &write_limits;
/* Bind callbacks for optional fields */
alltypes.opt_emptymsg.funcs.encode = &write_emptymsg;
+ alltypes.opt_fbytes.funcs.encode = &write_string;
+ alltypes.opt_fbytes.arg = "3059";
+
alltypes.oneof_msg1.funcs.encode = &write_submsg;
alltypes.oneof_msg1.arg = &oneof_msg1;
}
# Generate all fields as pointers.
* type:FT_POINTER
+*.*fbytes fixed_length:true max_size:4
&& strcmp(alltypes.req_submsg->substuff1, "1016") == 0);
TEST(alltypes.req_submsg && alltypes.req_submsg->substuff2
&& *alltypes.req_submsg->substuff2 == 1016);
- TEST(*alltypes.req_enum == MyEnum_Truth);
+ TEST(alltypes.req_enum && *alltypes.req_enum == MyEnum_Truth);
+ TEST(alltypes.req_fbytes && memcmp(alltypes.req_fbytes, "1019", 4) == 0);
TEST(alltypes.rep_int32_count == 5 && alltypes.rep_int32[4] == -2001 && alltypes.rep_int32[0] == 0);
TEST(alltypes.rep_int64_count == 5 && alltypes.rep_int64[4] == -2002 && alltypes.rep_int64[0] == 0);
TEST(alltypes.rep_enum_count == 5 && alltypes.rep_enum[4] == MyEnum_Truth && alltypes.rep_enum[0] == MyEnum_Zero);
TEST(alltypes.rep_emptymsg_count == 5);
+ TEST(alltypes.rep_fbytes_count == 5);
+ TEST(alltypes.rep_fbytes[0][0] == 0 && alltypes.rep_fbytes[0][3] == 0);
+ TEST(memcmp(alltypes.rep_fbytes[4], "2019", 4) == 0);
if (mode == 0)
{
TEST(alltypes.opt_bytes == NULL);
TEST(alltypes.opt_submsg == NULL);
TEST(alltypes.opt_enum == NULL);
+ TEST(alltypes.opt_fbytes == NULL);
TEST(alltypes.which_oneof == 0);
}
TEST(alltypes.opt_submsg && *alltypes.opt_submsg->substuff2 == 3056);
TEST(alltypes.opt_enum && *alltypes.opt_enum == MyEnum_Truth);
TEST(alltypes.opt_emptymsg);
+ TEST(alltypes.opt_fbytes && memcmp(alltypes.opt_fbytes, "3059", 4) == 0);
TEST(alltypes.which_oneof == AllTypes_oneof_msg1_tag);
TEST(alltypes.oneof.oneof_msg1 && strcmp(alltypes.oneof.oneof_msg1->substuff1, "4059") == 0);
SubMessage req_submsg = {"1016", &req_substuff};
MyEnum req_enum = MyEnum_Truth;
EmptyMessage req_emptymsg = {0};
+ pb_byte_t req_fbytes[4] = {'1', '0', '1', '9'};
int32_t end = 1099;
{"2016", &rep_substuff2, &rep_substuff3}};
MyEnum rep_enum[5] = {0, 0, 0, 0, MyEnum_Truth};
EmptyMessage rep_emptymsg[5] = {{0}, {0}, {0}, {0}, {0}};
+ pb_byte_t rep_fbytes[5][4] = {{0}, {0}, {0}, {0}, {'2', '0', '1', '9'}};
/* Values for optional fields */
int32_t opt_int32 = 3041;
SubMessage opt_submsg = {"3056", &opt_substuff};
MyEnum opt_enum = MyEnum_Truth;
EmptyMessage opt_emptymsg = {0};
+ pb_byte_t opt_fbytes[4] = {'3', '0', '5', '9'};
static int32_t oneof_substuff = 4059;
SubMessage oneof_msg1 = {"4059", &oneof_substuff};
alltypes.req_submsg = &req_submsg;
alltypes.req_enum = &req_enum;
alltypes.req_emptymsg = &req_emptymsg;
+ alltypes.req_fbytes = &req_fbytes;
alltypes.req_limits = &req_limits;
alltypes.rep_int32_count = 5; alltypes.rep_int32 = rep_int32;
alltypes.rep_submsg_count = 5; alltypes.rep_submsg = rep_submsg;
alltypes.rep_enum_count = 5; alltypes.rep_enum = rep_enum;
alltypes.rep_emptymsg_count = 5; alltypes.rep_emptymsg = rep_emptymsg;
+ alltypes.rep_fbytes_count = 5; alltypes.rep_fbytes = rep_fbytes;
if (mode != 0)
{
alltypes.opt_submsg = &opt_submsg;
alltypes.opt_enum = &opt_enum;
alltypes.opt_emptymsg = &opt_emptymsg;
+ alltypes.opt_fbytes = &opt_fbytes;
alltypes.which_oneof = AllTypes_oneof_msg1_tag;
alltypes.oneof.oneof_msg1 = &oneof_msg1;
* max_size:16
* max_count:5
+*.*fbytes fixed_length:true max_size:4
SubMessage sng_submsg = 16;
MyEnum sng_enum = 17;
EmptyMessage sng_emptymsg = 18;
+ bytes sng_fbytes = 19;
repeated int32 rep_int32 = 21 [packed = true];
repeated int64 rep_int64 = 22 [packed = true];
repeated SubMessage rep_submsg = 36;
repeated MyEnum rep_enum = 37 [packed = true];
repeated EmptyMessage rep_emptymsg = 38;
+ repeated bytes rep_fbytes = 39;
oneof oneof
{
TEST(alltypes.rep_enum_count == 5 && alltypes.rep_enum[4] == MyEnum_Truth && alltypes.rep_enum[0] == MyEnum_Zero);
TEST(alltypes.rep_emptymsg_count == 5);
+ TEST(alltypes.rep_fbytes_count == 5);
+ TEST(alltypes.rep_fbytes[0][0] == 0 && alltypes.rep_fbytes[0][3] == 0);
+ TEST(memcmp(alltypes.rep_fbytes[4], "2019", 4) == 0);
+
if (mode == 0)
{
/* Expect default values */
TEST(alltypes.sng_submsg.substuff2 == 0);
TEST(alltypes.sng_submsg.substuff3 == 0);
TEST(alltypes.sng_enum == MyEnum_Zero);
+ TEST(alltypes.sng_fbytes[0] == 0 &&
+ alltypes.sng_fbytes[1] == 0 &&
+ alltypes.sng_fbytes[2] == 0 &&
+ alltypes.sng_fbytes[3] == 0);
TEST(alltypes.which_oneof == 0);
}
TEST(alltypes.sng_submsg.substuff2 == 3056);
TEST(alltypes.sng_submsg.substuff3 == 0);
TEST(alltypes.sng_enum == MyEnum_Truth);
+ TEST(memcmp(alltypes.sng_fbytes, "3059", 4) == 0);
TEST(alltypes.which_oneof == AllTypes_oneof_msg1_tag);
TEST(strcmp(alltypes.oneof.oneof_msg1.substuff1, "4059") == 0);
alltypes.rep_enum_count = 5; alltypes.rep_enum[4] = MyEnum_Truth;
alltypes.rep_emptymsg_count = 5;
+ alltypes.rep_fbytes_count = 5;
+ memcpy(alltypes.rep_fbytes[4], "2019", 4);
+
alltypes.req_limits.int32_min = INT32_MIN;
alltypes.req_limits.int32_max = INT32_MAX;
alltypes.req_limits.uint32_min = 0;
strcpy(alltypes.sng_submsg.substuff1, "3056");
alltypes.sng_submsg.substuff2 = 3056;
alltypes.sng_enum = MyEnum_Truth;
+ memcpy(alltypes.sng_fbytes, "3059", 4);
alltypes.which_oneof = AllTypes_oneof_msg1_tag;
strcpy(alltypes.oneof.oneof_msg1.substuff1, "4059");
* max_size:16
* max_count:5
+*.*fbytes fixed_length:true max_size:4
required SubMessage req_submsg = 16;
required MyEnum req_enum = 17;
required EmptyMessage req_emptymsg = 18;
-
+ required bytes req_fbytes = 19;
repeated int32 rep_int32 = 21;
repeated int64 rep_int64 = 22;
repeated SubMessage rep_submsg = 10036;
repeated MyEnum rep_enum = 10037;
repeated EmptyMessage rep_emptymsg = 10038;
+ repeated bytes rep_fbytes = 10039;
optional int32 opt_int32 = 10041 [default = 4041];
optional int64 opt_int64 = 10042 [default = 4042];
optional SubMessage opt_submsg = 10056;
optional MyEnum opt_enum = 10057 [default = Second];
optional EmptyMessage opt_emptymsg = 10058;
+ optional bytes opt_fbytes = 10059 [default = "4059"];
oneof oneof
{
- SubMessage oneof_msg1 = 10059;
- EmptyMessage oneof_msg2 = 10060;
+ SubMessage oneof_msg1 = 10060;
+ EmptyMessage oneof_msg2 = 10061;
}
// Check that extreme integer values are handled correctly
* max_size:16
* max_count:5
-
+*.*fbytes fixed_length:true max_size:4
required SubMessage req_submsg = 16;
required MyEnum req_enum = 17;
required EmptyMessage req_emptymsg = 18;
-
+ required bytes req_fbytes = 19;
repeated int32 rep_int32 = 21;
repeated int64 rep_int64 = 22;
repeated SubMessage rep_submsg = 10036;
repeated MyEnum rep_enum = 10037;
repeated EmptyMessage rep_emptymsg = 10038;
+ repeated bytes rep_fbytes = 10039;
optional int32 opt_int32 = 10041 [default = 4041];
optional int64 opt_int64 = 10042 [default = 4042];
optional SubMessage opt_submsg = 10056;
optional MyEnum opt_enum = 10057 [default = Second];
optional EmptyMessage opt_emptymsg = 10058;
+ optional bytes opt_fbytes = 10059 [default = "4059"];
oneof oneof
{
- SubMessage oneof_msg1 = 10059;
- EmptyMessage oneof_msg2 = 10060;
+ SubMessage oneof_msg1 = 10060;
+ EmptyMessage oneof_msg2 = 10061;
}
// Check that extreme integer values are handled correctly
# Generate all fields as pointers.
* type:FT_POINTER
-
+*.*fbytes fixed_length:true max_size:4
* max_size:32
* max_count:8
*.extensions type:FT_IGNORE
+*.*fbytes fixed_length:true max_size:4
* max_size:16
* max_count:5
-
+*.*fbytes fixed_length:true max_size:4
# Generate all fields as pointers.
* type:FT_POINTER
-
+*.*fbytes fixed_length:true max_size:4