[jsonrpc-glib] message: add PUT_STRV() helper
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [jsonrpc-glib] message: add PUT_STRV() helper
- Date: Fri, 20 Apr 2018 07:13:55 +0000 (UTC)
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]