[jsonrpc-glib] message: add GET_STRV helper
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [jsonrpc-glib] message: add GET_STRV helper
- Date: Fri, 20 Apr 2018 07:27:53 +0000 (UTC)
commit 42fbf4e63216e524baa2195086a4d7c020f8d89b
Author: Christian Hergert <chergert redhat com>
Date: Fri Apr 20 00:28:29 2018 -0700
message: add GET_STRV helper
src/jsonrpc-message.c | 3 +++
src/jsonrpc-message.h | 10 ++++++++++
tests/test-message.c | 10 ++++++++++
3 files changed, 23 insertions(+)
---
diff --git a/src/jsonrpc-message.c b/src/jsonrpc-message.c
index fea7d2e..5ba4df5 100644
--- a/src/jsonrpc-message.c
+++ b/src/jsonrpc-message.c
@@ -47,6 +47,7 @@
#define IS_PUT_DOUBLE(_any) COMPARE_MAGIC(_any, PUT_DOUBLE)
#define IS_GET_STRING(_any) COMPARE_MAGIC(_any, GET_STRING)
+#define IS_GET_STRV(_any) COMPARE_MAGIC(_any, GET_STRV)
#define IS_GET_INT32(_any) COMPARE_MAGIC(_any, GET_INT32)
#define IS_GET_INT64(_any) COMPARE_MAGIC(_any, GET_INT64)
#define IS_GET_BOOLEAN(_any) COMPARE_MAGIC(_any, GET_BOOLEAN)
@@ -382,6 +383,8 @@ jsonrpc_message_parse_object (GVariantDict *dict,
}
}
}
+ else if (IS_GET_STRV (valptr))
+ ret = g_variant_dict_lookup (dict, key, "^as", ((JsonrpcMessageGetStrv *)valptr)->valptr);
else if (IS_GET_INT32 (valptr))
ret = g_variant_dict_lookup (dict, key, "i", ((JsonrpcMessageGetInt32 *)valptr)->valptr);
else if (IS_GET_INT64 (valptr))
diff --git a/src/jsonrpc-message.h b/src/jsonrpc-message.h
index e15c2db..2d10a98 100644
--- a/src/jsonrpc-message.h
+++ b/src/jsonrpc-message.h
@@ -53,6 +53,12 @@ typedef struct
const char **valptr;
} JsonrpcMessageGetString __attribute__((aligned (8)));
+typedef struct
+{
+ JsonrpcMessageMagic magic;
+ char ***valptr;
+} JsonrpcMessageGetStrv __attribute__((aligned (8)));
+
typedef struct
{
JsonrpcMessageMagic magic;
@@ -125,6 +131,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_GET_STRV_MAGIC _JSONRPC_MAGIC("GETZ")
#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")
@@ -140,6 +147,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_GET_STRV_MAGIC_C _JSONRPC_MAGIC_C('G','E','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')
@@ -168,6 +176,8 @@ typedef struct
#define JSONRPC_MESSAGE_PUT_STRV(_val) \
(&((JsonrpcMessagePutStrv) { .magic = {_JSONRPC_MESSAGE_PUT_STRV_MAGIC_C}, .val = _val }))
+#define JSONRPC_MESSAGE_GET_STRV(_valptr) \
+ (&((JsonrpcMessageGetStrv) { .magic = {_JSONRPC_MESSAGE_GET_STRV_MAGIC_C}, .valptr = _valptr }))
#define JSONRPC_MESSAGE_PUT_INT32(_val) \
(&((JsonrpcMessagePutInt32) { .magic = {_JSONRPC_MESSAGE_PUT_INT32_MAGIC_C}, .val = _val }))
diff --git a/tests/test-message.c b/tests/test-message.c
index b786321..02aecce 100644
--- a/tests/test-message.c
+++ b/tests/test-message.c
@@ -241,11 +241,21 @@ test_strv (void)
{
g_autoptr(GVariant) src = NULL;
static const gchar *ar[] = { "a", "b", "c", NULL };
+ g_auto(GStrv) get_ar = NULL;
g_autofree gchar *print = NULL;
+ gboolean r;
src = JSONRPC_MESSAGE_NEW ("key", JSONRPC_MESSAGE_PUT_STRV (ar));
print = g_variant_print (src, TRUE);
g_assert_cmpstr (print, ==, "{'key': <['a', 'b', 'c']>}");
+
+ r = JSONRPC_MESSAGE_PARSE (src, "key", JSONRPC_MESSAGE_GET_STRV (&get_ar));
+ g_assert_true (r);
+ g_assert_nonnull (get_ar);
+ g_assert_cmpstr (get_ar[0], ==, "a");
+ g_assert_cmpstr (get_ar[1], ==, "b");
+ g_assert_cmpstr (get_ar[2], ==, "c");
+ g_assert_null (get_ar[3]);
}
gint
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]