pw_protobuf: Extended decoder type support

This change adds decoder support for protobuf bool, fixed32,
fixed64, float, double, bytes, and string value.

Change-Id: Ie8369f5802d07290c0d6c12b5049c6bd8cc7a5da
diff --git a/pw_protobuf/decoder_test.cc b/pw_protobuf/decoder_test.cc
index 45fe93d..c655b09 100644
--- a/pw_protobuf/decoder_test.cc
+++ b/pw_protobuf/decoder_test.cc
@@ -23,6 +23,8 @@
 class TestDecodeHandler : public DecodeHandler {
  public:
   Status ProcessField(Decoder* decoder, uint32_t field_number) override {
+    std::string_view str;
+
     switch (field_number) {
       case 1:
         decoder->ReadInt32(field_number, &test_int32);
@@ -30,6 +32,20 @@
       case 2:
         decoder->ReadSint32(field_number, &test_sint32);
         break;
+      case 3:
+        decoder->ReadBool(field_number, &test_bool);
+        break;
+      case 4:
+        decoder->ReadDouble(field_number, &test_double);
+        break;
+      case 5:
+        decoder->ReadFixed32(field_number, &test_fixed32);
+        break;
+      case 6:
+        decoder->ReadString(field_number, &str);
+        std::memcpy(test_string, str.data(), str.size());
+        test_string[str.size()] = '\0';
+        break;
     }
 
     called = true;
@@ -39,6 +55,10 @@
   bool called = false;
   int32_t test_int32 = 0;
   int32_t test_sint32 = 0;
+  bool test_bool = true;
+  double test_double = 0;
+  uint32_t test_fixed32 = 0;
+  char test_string[16];
 };
 
 TEST(Decoder, Decode) {
@@ -57,6 +77,8 @@
     0x21, 0x6e, 0x86, 0x1b, 0xf0, 0xf9, 0x21, 0x09, 0x40,
     // type=fixed32, k=5, v=0xdeadbeef
     0x2d, 0xef, 0xbe, 0xad, 0xde,
+    // type=string, k=6, v="Hello world"
+    0x32, 0x0b, 'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd',
   };
   // clang-format on
 
@@ -65,6 +87,10 @@
   EXPECT_TRUE(handler.called);
   EXPECT_EQ(handler.test_int32, 42);
   EXPECT_EQ(handler.test_sint32, -13);
+  EXPECT_FALSE(handler.test_bool);
+  EXPECT_EQ(handler.test_double, 3.14159);
+  EXPECT_EQ(handler.test_fixed32, 0xdeadbeef);
+  EXPECT_STREQ(handler.test_string, "Hello world");
 }
 
 TEST(Decoder, Decode_OverridesDuplicateFields) {