From d6408c0dd16b6579d23a288e576e0fd2d6ebe989 Mon Sep 17 00:00:00 2001 From: Pawel Wodkowski Date: Wed, 14 Feb 2018 17:29:46 +0100 Subject: [PATCH] lib/json: add utility function for writeing key and value at once. Change-Id: Ibbcf8cebff33159eff8345a5f0f5166cd18ea4b3 Signed-off-by: Pawel Wodkowski Reviewed-on: https://review.gerrithub.io/400600 Tested-by: SPDK Automated Test System Reviewed-by: Daniel Verkamp Reviewed-by: Jim Harris --- include/spdk/json.h | 13 +++++++ lib/json/json_write.c | 87 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+) diff --git a/include/spdk/json.h b/include/spdk/json.h index 6c21d1f56..42cb5e859 100644 --- a/include/spdk/json.h +++ b/include/spdk/json.h @@ -241,6 +241,19 @@ int spdk_json_write_val(struct spdk_json_write_ctx *w, const struct spdk_json_va */ int spdk_json_write_val_raw(struct spdk_json_write_ctx *w, const void *data, size_t len); +/* Utility functions */ +int spdk_json_write_named_null(struct spdk_json_write_ctx *w, const char *name); +int spdk_json_write_named_bool(struct spdk_json_write_ctx *w, const char *name, bool val); +int spdk_json_write_named_int32(struct spdk_json_write_ctx *w, const char *name, int32_t val); +int spdk_json_write_named_uint32(struct spdk_json_write_ctx *w, const char *name, uint32_t val); +int spdk_json_write_named_uint64(struct spdk_json_write_ctx *w, const char *name, uint64_t val); +int spdk_json_write_named_int64(struct spdk_json_write_ctx *w, const char *name, int64_t val); +int spdk_json_write_named_string(struct spdk_json_write_ctx *w, const char *name, const char *val); +int spdk_json_write_named_string_fmt(struct spdk_json_write_ctx *w, const char *name, + const char *fmt, ...) __attribute__((__format__(__printf__, 3, 4))); +int spdk_json_write_named_array_begin(struct spdk_json_write_ctx *w, const char *name); +int spdk_json_write_named_object_begin(struct spdk_json_write_ctx *w, const char *name); + #ifdef __cplusplus } #endif diff --git a/lib/json/json_write.c b/lib/json/json_write.c index fa7074876..d1058c54d 100644 --- a/lib/json/json_write.c +++ b/lib/json/json_write.c @@ -579,3 +579,90 @@ spdk_json_write_val(struct spdk_json_write_ctx *w, const struct spdk_json_val *v return fail(w); } + +int spdk_json_write_named_null(struct spdk_json_write_ctx *w, const char *name) +{ + int rc = spdk_json_write_name(w, name); + return rc ? rc : spdk_json_write_null(w); +} + +int spdk_json_write_named_bool(struct spdk_json_write_ctx *w, const char *name, bool val) +{ + int rc = spdk_json_write_name(w, name); + + return rc ? rc : spdk_json_write_bool(w, val); +} + +int spdk_json_write_named_int32(struct spdk_json_write_ctx *w, const char *name, int32_t val) +{ + int rc = spdk_json_write_name(w, name); + + return rc ? rc : spdk_json_write_int32(w, val); +} + +int spdk_json_write_named_uint32(struct spdk_json_write_ctx *w, const char *name, uint32_t val) +{ + int rc = spdk_json_write_name(w, name); + + return rc ? rc : spdk_json_write_uint32(w, val); +} + +int spdk_json_write_named_uint64(struct spdk_json_write_ctx *w, const char *name, uint64_t val) +{ + int rc = spdk_json_write_name(w, name); + + return rc ? rc : spdk_json_write_uint64(w, val); +} + +int spdk_json_write_named_int64(struct spdk_json_write_ctx *w, const char *name, int64_t val) +{ + int rc = spdk_json_write_name(w, name); + + return rc ? rc : spdk_json_write_int64(w, val); +} + +int spdk_json_write_named_string(struct spdk_json_write_ctx *w, const char *name, const char *val) +{ + int rc = spdk_json_write_name(w, name); + + return rc ? rc : spdk_json_write_string(w, val); +} + +int spdk_json_write_named_string_fmt(struct spdk_json_write_ctx *w, const char *name, + const char *fmt, ...) +{ + char *s; + va_list args; + int rc; + + rc = spdk_json_write_name(w, name); + if (rc) { + return rc; + } + + va_start(args, fmt); + s = spdk_vsprintf_alloc(fmt, args); + va_end(args); + + if (s == NULL) { + return -1; + } + + rc = spdk_json_write_string(w, s); + free(s); + return rc; +} + +int spdk_json_write_named_array_begin(struct spdk_json_write_ctx *w, const char *name) +{ + int rc = spdk_json_write_name(w, name); + + return rc ? rc : spdk_json_write_array_begin(w); +} + +int spdk_json_write_named_object_begin(struct spdk_json_write_ctx *w, const char *name) +{ + int rc = spdk_json_write_name(w, name); + + return rc ? rc : spdk_json_write_object_begin(w); +}