1 /* Checks that missing required fields are detected properly */ 2 3 #include <stdio.h> 4 #include <pb_encode.h> 5 #include <pb_decode.h> 6 #include "missing_fields.pb.h" 7 8 int main() 9 { 10 uint8_t buffer[512]; 11 size_t size; 12 13 /* Create a message with one missing field */ 14 { 15 MissingField msg = {0}; 16 pb_ostream_t stream = pb_ostream_from_buffer(buffer, sizeof(buffer)); 17 18 if (!pb_encode(&stream, MissingField_fields, &msg)) 19 { 20 printf("Encode failed.\n"); 21 return 1; 22 } 23 24 size = stream.bytes_written; 25 } 26 27 /* Test that it decodes properly if we don't require that field */ 28 { 29 MissingField msg = {0}; 30 pb_istream_t stream = pb_istream_from_buffer(buffer, size); 31 32 if (!pb_decode(&stream, MissingField_fields, &msg)) 33 { 34 printf("Decode failed: %s\n", PB_GET_ERROR(&stream)); 35 return 2; 36 } 37 } 38 39 /* Test that it does *not* decode properly if we require the field */ 40 { 41 AllFields msg = {0}; 42 pb_istream_t stream = pb_istream_from_buffer(buffer, size); 43 44 if (pb_decode(&stream, AllFields_fields, &msg)) 45 { 46 printf("Decode didn't detect missing field.\n"); 47 return 3; 48 } 49 } 50 51 return 0; /* All ok */ 52 } 53 54