From d96e9575d4eb188bf84134c25cfa515b2949dbd7 Mon Sep 17 00:00:00 2001 From: Petteri Aimonen Date: Sun, 18 Sep 2011 16:04:45 +0000 Subject: [PATCH] Added comments to the simplest decode/encode examples. git-svn-id: https://svn.kapsi.fi/jpa/nanopb@979 e3a754e5-d11d-0410-8d38-ebb782a927b9 --- tests/test_decode1.c | 17 +++++++++++++++-- tests/test_encode1.c | 14 ++++++++++---- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/tests/test_decode1.c b/tests/test_decode1.c index d0cc427a..3f02745e 100644 --- a/tests/test_decode1.c +++ b/tests/test_decode1.c @@ -1,11 +1,17 @@ /* A very simple decoding test case, using person.proto. * Produces output compatible with protoc --decode. + * Reads the encoded data from stdin and prints the values + * to stdout as text. + * + * Run e.g. ./test_encode1 | ./test_decode1 */ #include #include #include "person.pb.h" +/* This function is called once from main(), it handles + the decoding and printing. */ bool print_person(pb_istream_t *stream) { int i; @@ -14,6 +20,8 @@ bool print_person(pb_istream_t *stream) if (!pb_decode(stream, Person_fields, &person)) return false; + /* Now the decoding is done, rest is just to print stuff out. */ + printf("name: \"%s\"\n", person.name); printf("id: %d\n", person.id); @@ -46,6 +54,7 @@ bool print_person(pb_istream_t *stream) return true; } +/* This binds the pb_istream_t to stdin */ bool callback(pb_istream_t *stream, uint8_t *buf, size_t count) { FILE *file = (FILE*)stream->state; @@ -53,6 +62,7 @@ bool callback(pb_istream_t *stream, uint8_t *buf, size_t count) if (buf == NULL) { + /* Skipping data */ while (count-- && fgetc(file) != EOF); return count == 0; } @@ -72,7 +82,10 @@ int main() */ pb_istream_t stream = {&callback, stdin, 10000}; if (!print_person(&stream)) + { printf("Parsing failed.\n"); - - return 0; + return 1; + } else { + return 0; + } } diff --git a/tests/test_encode1.c b/tests/test_encode1.c index df1ec4fc..f46e60a6 100644 --- a/tests/test_encode1.c +++ b/tests/test_encode1.c @@ -1,11 +1,13 @@ /* A very simple encoding test case using person.proto. - * Just puts constant data in the fields. + * Just puts constant data in the fields and writes the + * data to stdout. */ #include #include #include "person.pb.h" +/* This binds the pb_ostream_t into the stdout stream */ bool streamcallback(pb_ostream_t *stream, const uint8_t *buf, size_t count) { FILE *file = (FILE*) stream->state; @@ -14,12 +16,16 @@ bool streamcallback(pb_ostream_t *stream, const uint8_t *buf, size_t count) int main() { + /* Initialize the structure with constants */ Person person = {"Test Person 99", 99, true, "test@person.com", 1, {{"555-12345678", true, Person_PhoneType_MOBILE}}}; + /* Prepare the stream, output goes directly to stdout */ pb_ostream_t stream = {&streamcallback, stdout, SIZE_MAX, 0}; - pb_encode(&stream, Person_fields, &person); - - return 0; + /* Now encode it and check if we succeeded. */ + if (pb_encode(&stream, Person_fields, &person)) + return 0; /* Success */ + else + return 1; /* Failure */ } -- 2.16.6