17ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen/* Same as test_encode1.c, except writes directly to stdout. 27ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen */ 37ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 47ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#include <stdio.h> 57ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#include <pb_encode.h> 67ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#include "person.pb.h" 77ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#include "test_helpers.h" 87ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 97ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen/* This binds the pb_ostream_t into the stdout stream */ 107ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohenbool streamcallback(pb_ostream_t *stream, const uint8_t *buf, size_t count) 117ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen{ 127ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen FILE *file = (FILE*) stream->state; 137ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen return fwrite(buf, 1, count, file) == count; 147ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen} 157ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 167ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohenint main() 177ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen{ 187ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen /* Initialize the structure with constants */ 197ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen Person person = {"Test Person 99", 99, true, "test@person.com", 207ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 3, {{"555-12345678", true, Person_PhoneType_MOBILE}, 217ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen {"99-2342", false, 0}, 227ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen {"1234-5678", true, Person_PhoneType_WORK}, 237ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen }}; 247ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 257ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen /* Prepare the stream, output goes directly to stdout */ 267ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen pb_ostream_t stream = {&streamcallback, NULL, SIZE_MAX, 0}; 277ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen stream.state = stdout; 287ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen SET_BINARY_MODE(stdout); 297ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 307ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen /* Now encode it and check if we succeeded. */ 317ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen if (pb_encode(&stream, Person_fields, &person)) 327ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen { 337ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen return 0; /* Success */ 347ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen } 357ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen else 367ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen { 377ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen fprintf(stderr, "Encoding failed: %s\n", PB_GET_ERROR(&stream)); 387ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen return 1; /* Failure */ 397ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen } 407ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen} 41