[jsonrpc-glib] message: add PUT_STRV() helper



commit 15228ab86d64dfcd15ce227cc40ff5d1d9d8a1eb
Author: Christian Hergert <chergert redhat com>
Date:   Fri Apr 20 00:14:15 2018 -0700

    message: add PUT_STRV() helper

 src/jsonrpc-message.c |  3 +++
 src/jsonrpc-message.h | 11 +++++++++++
 tests/test-message.c  | 13 +++++++++++++
 3 files changed, 27 insertions(+)
---
diff --git a/src/jsonrpc-message.c b/src/jsonrpc-message.c
index 660ca6a..fea7d2e 100644
--- a/src/jsonrpc-message.c
+++ b/src/jsonrpc-message.c
@@ -40,6 +40,7 @@
             sizeof ((_any)->magic.bytes)) == 0)
 
 #define IS_PUT_STRING(_any)  COMPARE_MAGIC(_any, PUT_STRING)
+#define IS_PUT_STRV(_any)    COMPARE_MAGIC(_any, PUT_STRV)
 #define IS_PUT_INT32(_any)   COMPARE_MAGIC(_any, PUT_INT32)
 #define IS_PUT_INT64(_any)   COMPARE_MAGIC(_any, PUT_INT64)
 #define IS_PUT_BOOLEAN(_any) COMPARE_MAGIC(_any, PUT_BOOLEAN)
@@ -136,6 +137,8 @@ jsonrpc_message_build_object (GVariantBuilder *builder,
           else
             g_variant_builder_add (builder, "ms", NULL);
         }
+      else if (IS_PUT_STRV (valptr))
+        g_variant_builder_add (builder, "^as", ((JsonrpcMessagePutStrv *)valptr)->val);
       else if (IS_PUT_INT32 (valptr))
         g_variant_builder_add (builder, "i", ((JsonrpcMessagePutInt32 *)valptr)->val);
       else if (IS_PUT_INT64 (valptr))
diff --git a/src/jsonrpc-message.h b/src/jsonrpc-message.h
index 8fddb46..e15c2db 100644
--- a/src/jsonrpc-message.h
+++ b/src/jsonrpc-message.h
@@ -41,6 +41,12 @@ typedef struct
   const char *val;
 } JsonrpcMessagePutString __attribute__((aligned (8)));
 
+typedef struct
+{
+  JsonrpcMessageMagic magic;
+  const char * const *val;
+} JsonrpcMessagePutStrv __attribute__((aligned (8)));
+
 typedef struct
 {
   JsonrpcMessageMagic magic;
@@ -118,6 +124,7 @@ typedef struct
 
 #define _JSONRPC_MESSAGE_PUT_STRING_MAGIC  _JSONRPC_MAGIC("PUTS")
 #define _JSONRPC_MESSAGE_GET_STRING_MAGIC  _JSONRPC_MAGIC("GETS")
+#define _JSONRPC_MESSAGE_PUT_STRV_MAGIC    _JSONRPC_MAGIC("PUTZ")
 #define _JSONRPC_MESSAGE_PUT_INT32_MAGIC   _JSONRPC_MAGIC("PUTI")
 #define _JSONRPC_MESSAGE_GET_INT32_MAGIC   _JSONRPC_MAGIC("GETI")
 #define _JSONRPC_MESSAGE_PUT_INT64_MAGIC   _JSONRPC_MAGIC("PUTX")
@@ -132,6 +139,7 @@ typedef struct
 
 #define _JSONRPC_MESSAGE_PUT_STRING_MAGIC_C  _JSONRPC_MAGIC_C('P','U','T','S')
 #define _JSONRPC_MESSAGE_GET_STRING_MAGIC_C  _JSONRPC_MAGIC_C('G','E','T','S')
+#define _JSONRPC_MESSAGE_PUT_STRV_MAGIC_C    _JSONRPC_MAGIC_C('P','U','T','Z')
 #define _JSONRPC_MESSAGE_PUT_INT32_MAGIC_C   _JSONRPC_MAGIC_C('P','U','T','I')
 #define _JSONRPC_MESSAGE_GET_INT32_MAGIC_C   _JSONRPC_MAGIC_C('G','E','T','I')
 #define _JSONRPC_MESSAGE_PUT_INT64_MAGIC_C   _JSONRPC_MAGIC_C('P','U','T','X')
@@ -158,6 +166,9 @@ typedef struct
 #define JSONRPC_MESSAGE_GET_STRING(_valptr) \
   (&((JsonrpcMessageGetString) { .magic = {_JSONRPC_MESSAGE_GET_STRING_MAGIC_C}, .valptr = _valptr }))
 
+#define JSONRPC_MESSAGE_PUT_STRV(_val) \
+  (&((JsonrpcMessagePutStrv) { .magic = {_JSONRPC_MESSAGE_PUT_STRV_MAGIC_C}, .val = _val }))
+
 #define JSONRPC_MESSAGE_PUT_INT32(_val) \
   (&((JsonrpcMessagePutInt32) { .magic = {_JSONRPC_MESSAGE_PUT_INT32_MAGIC_C}, .val = _val }))
 #define JSONRPC_MESSAGE_GET_INT32(_valptr) \
diff --git a/tests/test-message.c b/tests/test-message.c
index 6925ab4..b786321 100644
--- a/tests/test-message.c
+++ b/tests/test-message.c
@@ -236,6 +236,18 @@ test_null_string (void)
   g_assert_cmpstr (content_type, ==, NULL);
 }
 
+static void
+test_strv (void)
+{
+  g_autoptr(GVariant) src = NULL;
+  static const gchar *ar[] = { "a", "b", "c", NULL };
+  g_autofree gchar *print = NULL;
+
+  src = JSONRPC_MESSAGE_NEW ("key", JSONRPC_MESSAGE_PUT_STRV (ar));
+  print = g_variant_print (src, TRUE);
+  g_assert_cmpstr (print, ==, "{'key': <['a', 'b', 'c']>}");
+}
+
 gint
 main (gint argc,
       gchar *argv[])
@@ -251,5 +263,6 @@ main (gint argc,
   g_test_add_func ("/Jsonrpc/Message/new_array", test_new_array);
   g_test_add_func ("/Jsonrpc/Message/new_array_objs", test_new_array_objs);
   g_test_add_func ("/Jsonrpc/Message/null_string", test_null_string);
+  g_test_add_func ("/Jsonrpc/Message/strv", test_strv);
   return g_test_run ();
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]