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); +}