1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* A very simple encoding test case using person.proto.
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Just puts constant data in the fields and encodes into
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * buffer, which is then written to stdout.
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <stdio.h>
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <pb_encode.h>
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "person.pb.h"
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "test_helpers.h"
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgint main()
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    uint8_t buffer[Person_size];
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    pb_ostream_t stream;
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /* Initialize the structure with constants */
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    Person person = {"Test Person 99", 99, true, "test@person.com",
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        3, {{"555-12345678", true, Person_PhoneType_MOBILE},
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            {"99-2342", false, 0},
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            {"1234-5678", true, Person_PhoneType_WORK},
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        }};
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    stream = pb_ostream_from_buffer(buffer, sizeof(buffer));
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /* Now encode it and check if we succeeded. */
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    if (pb_encode(&stream, Person_fields, &person))
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    {
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        /* Write the result data to stdout */
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        SET_BINARY_MODE(stdout);
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        fwrite(buffer, 1, stream.bytes_written, stdout);
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        return 0; /* Success */
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    else
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    {
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        fprintf(stderr, "Encoding failed: %s\n", PB_GET_ERROR(&stream));
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        return 1; /* Failure */
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org