Added comments to the simplest decode/encode examples.
authorPetteri Aimonen <jpa@npb.mail.kapsi.fi>
Sun, 18 Sep 2011 16:04:45 +0000 (16:04 +0000)
committerPetteri Aimonen <jpa@npb.mail.kapsi.fi>
Sun, 18 Sep 2011 16:04:45 +0000 (16:04 +0000)
git-svn-id: https://svn.kapsi.fi/jpa/nanopb@979 e3a754e5-d11d-0410-8d38-ebb782a927b9

tests/test_decode1.c
tests/test_encode1.c

index d0cc427..3f02745 100644 (file)
@@ -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 <stdio.h>
 #include <pb_decode.h>
 #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;
+    }
 }
index df1ec4f..f46e60a 100644 (file)
@@ -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 <stdio.h>
 #include <pb_encode.h>
 #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 */
 }