17ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen/* A very simple encoding test case using person.proto. 27ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen * Just puts constant data in the fields and encodes into 37ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen * buffer, which is then written to stdout. 47ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen */ 57ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 67ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#include <stdio.h> 77ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#include <pb_encode.h> 87ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#include "person.pb.h" 97ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen#include "test_helpers.h" 107ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 117ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohenint main() 127ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen{ 137ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen uint8_t buffer[Person_size]; 147ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen pb_ostream_t stream; 157ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 167ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen /* Initialize the structure with constants */ 177ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen Person person = {"Test Person 99", 99, true, "test@person.com", 187ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 3, {{"555-12345678", true, Person_PhoneType_MOBILE}, 197ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen {"99-2342", false, 0}, 207ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen {"1234-5678", true, Person_PhoneType_WORK}, 217ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen }}; 227ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 237ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen stream = pb_ostream_from_buffer(buffer, sizeof(buffer)); 247ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen 257ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen /* Now encode it and check if we succeeded. */ 267ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen if (pb_encode(&stream, Person_fields, &person)) 277ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen { 287ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen /* Write the result data to stdout */ 297ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen SET_BINARY_MODE(stdout); 307ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen fwrite(buffer, 1, stream.bytes_written, stdout); 317ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen return 0; /* Success */ 327ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen } 337ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen else 347ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen { 357ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen fprintf(stderr, "Encoding failed: %s\n", PB_GET_ERROR(&stream)); 367ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen return 1; /* Failure */ 377ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen } 387ef855e462b9a18b7d330e4b40f350164a6ad9daEtan Cohen} 39