std::tuple support for append/read

Change-Id: If914032fa4f655af509ac58a5e0057968f71aa32
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
diff --git a/test/message/append.cpp b/test/message/append.cpp
index 4734815..03ab781 100644
--- a/test/message/append.cpp
+++ b/test/message/append.cpp
@@ -293,6 +293,45 @@
         b.call_noreply(m);
     }
 
+    // Test tuple.
+    {
+        auto m = newMethodCall__test(b);
+        std::tuple<int, double, std::string> a{ 3, 4.1, "asdf" };
+        m.append(1, a, 2);
+        verifyTypeString = "i(ids)i";
+
+        struct verify
+        {
+            static void op(sd_bus_message* m)
+            {
+                int32_t a = 0;
+                double b = 0;
+                const char* c = nullptr;
+
+                sd_bus_message_read(m, "i", &a);
+                assert(a == 1);
+
+                auto rc = sd_bus_message_enter_container(m,
+                                                         SD_BUS_TYPE_STRUCT,
+                                                         "ids");
+                assert(0 <= rc);
+
+                sd_bus_message_read(m, "ids", &a, &b, &c);
+                assert(a == 3);
+                assert(b == 4.1);
+                assert(0 == strcmp(c, "asdf"));
+
+                sd_bus_message_exit_container(m);
+
+                sd_bus_message_read(m, "i", &a);
+                assert(a == 2);
+            }
+        };
+        verifyCallback = &verify::op;
+
+        b.call_noreply(m);
+    }
+
     // Shutdown server.
     {
         auto m = b.new_method_call(SERVICE, "/", INTERFACE, QUIT_METHOD);