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
8int 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