/* Tests extension fields.
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pb_encode.h>
#include "alltypes.pb.h"
#include "extensions.pb.h"
#include "test_helpers.h"

int main(int argc, char **argv)
{
    uint8_t buffer[1024];
    pb_ostream_t stream;

    AllTypes alltypes = {0};
    int32_t extensionfield1 = 12345;
    pb_extension_t ext1 = pb_extension_init_zero;
    ExtensionMessage extensionfield2 = {"test", 54321};
    pb_extension_t ext2 = pb_extension_init_zero;

    /* Set up the extensions */
    alltypes.extensions = &ext1;

    ext1.type = &AllTypes_extensionfield1;
    ext1.dest = &extensionfield1;
    ext1.next = &ext2;
    
    ext2.type = &ExtensionMessage_AllTypes_extensionfield2;
    ext2.dest = &extensionfield2;
    ext2.next = NULL;

    /* Set up the output stream */
    stream = pb_ostream_from_buffer(buffer, sizeof(buffer));
    
    /* Now encode the message and check if we succeeded. */
    if (pb_encode(&stream, AllTypes_fields, &alltypes))
    {
        SET_BINARY_MODE(stdout);
        fwrite(buffer, 1, stream.bytes_written, stdout);
        return 0; /* Success */
    }
    else
    {
        fprintf(stderr, "Encoding failed: %s\n", PB_GET_ERROR(&stream));
        return 1; /* Failure */
    }
    
    /* Check that the field tags are properly generated */
    (void)AllTypes_extensionfield1_tag;
    (void)ExtensionMessage_AllTypes_extensionfield2_tag;
}

