summaryrefslogtreecommitdiffstats
path: root/lib/json.h
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@opensourcerouting.org>2021-11-17 11:59:12 +0100
committerDavid Lamparter <equinox@opensourcerouting.org>2021-11-17 16:01:30 +0100
commit2c4dfddb01cd7dfb28f410dca866738486981ca6 (patch)
treeaeef9d54486a5b3d83ea3444d0da36d3d1f8dcc0 /lib/json.h
parentlib: add vty_json() helper (diff)
downloadfrr-2c4dfddb01cd7dfb28f410dca866738486981ca6.tar.xz
frr-2c4dfddb01cd7dfb28f410dca866738486981ca6.zip
lib: add printfrr to json string helpers
... these should probably have been added ages ago. `json_object_string_addf(json, "key", "%pFX", prefix)` is super useful. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'lib/json.h')
-rw-r--r--lib/json.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/lib/json.h b/lib/json.h
index cad2d65f5..9d33ac7ae 100644
--- a/lib/json.h
+++ b/lib/json.h
@@ -26,6 +26,7 @@ extern "C" {
#endif
#include "command.h"
+#include "printfrr.h"
#include <json-c/json.h>
/*
@@ -59,6 +60,52 @@ extern struct json_object *json_object_lock(struct json_object *obj);
extern void json_object_free(struct json_object *obj);
extern void json_array_string_add(json_object *json, const char *str);
+/* printfrr => json helpers */
+
+PRINTFRR(3, 0)
+extern void json_object_string_addv(struct json_object *obj, const char *key,
+ const char *fmt, va_list args);
+PRINTFRR(3, 4)
+static inline void json_object_string_addf(struct json_object *obj,
+ const char *key, const char *fmt,
+ ...)
+{
+ va_list args;
+
+ va_start(args, fmt);
+ json_object_string_addv(obj, key, fmt, args);
+ va_end(args);
+}
+
+PRINTFRR(2, 0)
+extern void json_array_string_addv(json_object *json, const char *fmt,
+ va_list args);
+PRINTFRR(2, 3)
+static inline void json_array_string_addf(struct json_object *obj,
+ const char *fmt, ...)
+{
+ va_list args;
+
+ va_start(args, fmt);
+ json_array_string_addv(obj, fmt, args);
+ va_end(args);
+}
+
+PRINTFRR(1, 0)
+extern struct json_object *json_object_new_stringv(const char *fmt,
+ va_list args);
+PRINTFRR(1, 2)
+static inline struct json_object *json_object_new_stringf(const char *fmt, ...)
+{
+ struct json_object *ret;
+ va_list args;
+
+ va_start(args, fmt);
+ ret = json_object_new_stringv(fmt, args);
+ va_end(args);
+
+ return ret;
+}
#define JSON_STR "JavaScript Object Notation\n"