Document pb_close_string_substream.
[apps/agl-service-can-low-level.git] / tests / test_decode_callbacks.c
index 1c8d43a..95824d1 100644 (file)
@@ -8,17 +8,49 @@
 
 bool print_string(pb_istream_t *stream, const pb_field_t *field, void *arg)
 {
-    uint8_t buffer[1024];
+    uint8_t buffer[1024] = {0};
     
     /* We could read block-by-block to avoid the large buffer... */
-    if (stream->bytes_left > sizeof(buffer))
+    if (stream->bytes_left > sizeof(buffer) - 1)
         return false;
     
     if (!pb_read(stream, buffer, stream->bytes_left))
         return false;
     
-    /* Print the string, in format comparable with protoc --decode. */
-    printf("%s: \"%s\"\n", (char*)arg, buffer);
+    /* Print the string, in format comparable with protoc --decode.
+     * Format comes from the arg defined in main().
+     */
+    printf((char*)arg, buffer);
+    return true;
+}
+
+bool print_int32(pb_istream_t *stream, const pb_field_t *field, void *arg)
+{
+    uint64_t value;
+    if (!pb_decode_varint(stream, &value))
+        return false;
+    
+    printf((char*)arg, (long)value);
+    return true;
+}
+
+bool print_fixed32(pb_istream_t *stream, const pb_field_t *field, void *arg)
+{
+    uint32_t value;
+    if (!pb_decode_fixed32(stream, &value))
+        return false;
+    
+    printf((char*)arg, (long)value);
+    return true;
+}
+
+bool print_fixed64(pb_istream_t *stream, const pb_field_t *field, void *arg)
+{
+    uint64_t value;
+    if (!pb_decode_fixed64(stream, &value))
+        return false;
+    
+    printf((char*)arg, (long long)value);
     return true;
 }
 
@@ -34,11 +66,26 @@ int main()
      */
     TestMessage testmessage = {};
     
+    testmessage.submsg.stringvalue.funcs.decode = &print_string;
+    testmessage.submsg.stringvalue.arg = "submsg {\n  stringvalue: \"%s\"\n";
+    testmessage.submsg.int32value.funcs.decode = &print_int32;
+    testmessage.submsg.int32value.arg = "  int32value: %ld\n";
+    testmessage.submsg.fixed32value.funcs.decode = &print_fixed32;
+    testmessage.submsg.fixed32value.arg = "  fixed32value: %ld\n";
+    testmessage.submsg.fixed64value.funcs.decode = &print_fixed64;
+    testmessage.submsg.fixed64value.arg = "  fixed64value: %lld\n}\n";
+    
     testmessage.stringvalue.funcs.decode = &print_string;
-    testmessage.stringvalue.arg = "stringvalue";
+    testmessage.stringvalue.arg = "stringvalue: \"%s\"\n";
+    testmessage.int32value.funcs.decode = &print_int32;
+    testmessage.int32value.arg = "int32value: %ld\n";
+    testmessage.fixed32value.funcs.decode = &print_fixed32;
+    testmessage.fixed32value.arg = "fixed32value: %ld\n";
+    testmessage.fixed64value.funcs.decode = &print_fixed64;
+    testmessage.fixed64value.arg = "fixed64value: %lld\n";
     
     if (!pb_decode(&stream, TestMessage_fields, &testmessage))
         return 1;
     
     return 0;
-}
\ No newline at end of file
+}