json: add support for byte arrays to json builder
This commit is contained in:
parent
7466e94f13
commit
0710343ce7
|
@ -3624,6 +3624,36 @@ int json_buildv(JsonVariant **ret, va_list ap) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case _JSON_BUILD_BYTE_ARRAY: {
|
||||||
|
const void *array;
|
||||||
|
size_t n;
|
||||||
|
|
||||||
|
if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
|
||||||
|
r = -EINVAL;
|
||||||
|
goto finish;
|
||||||
|
}
|
||||||
|
|
||||||
|
array = va_arg(ap, const void*);
|
||||||
|
n = va_arg(ap, size_t);
|
||||||
|
|
||||||
|
if (current->n_suppress == 0) {
|
||||||
|
r = json_variant_new_array_bytes(&add, array, n);
|
||||||
|
if (r < 0)
|
||||||
|
goto finish;
|
||||||
|
}
|
||||||
|
|
||||||
|
n_subtract = 1;
|
||||||
|
|
||||||
|
if (current->expect == EXPECT_TOPLEVEL)
|
||||||
|
current->expect = EXPECT_END;
|
||||||
|
else if (current->expect == EXPECT_OBJECT_VALUE)
|
||||||
|
current->expect = EXPECT_OBJECT_KEY;
|
||||||
|
else
|
||||||
|
assert(current->expect == EXPECT_ARRAY_ELEMENT);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case _JSON_BUILD_OBJECT_BEGIN:
|
case _JSON_BUILD_OBJECT_BEGIN:
|
||||||
|
|
||||||
if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
|
if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
|
||||||
|
|
|
@ -228,6 +228,7 @@ enum {
|
||||||
_JSON_BUILD_STRV,
|
_JSON_BUILD_STRV,
|
||||||
_JSON_BUILD_BASE64,
|
_JSON_BUILD_BASE64,
|
||||||
_JSON_BUILD_ID128,
|
_JSON_BUILD_ID128,
|
||||||
|
_JSON_BUILD_BYTE_ARRAY,
|
||||||
_JSON_BUILD_MAX,
|
_JSON_BUILD_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -249,6 +250,7 @@ enum {
|
||||||
#define JSON_BUILD_STRV(l) _JSON_BUILD_STRV, ({ char **_x = l; _x; })
|
#define JSON_BUILD_STRV(l) _JSON_BUILD_STRV, ({ char **_x = l; _x; })
|
||||||
#define JSON_BUILD_BASE64(p, n) _JSON_BUILD_BASE64, ({ const void *_x = p; _x; }), ({ size_t _y = n; _y; })
|
#define JSON_BUILD_BASE64(p, n) _JSON_BUILD_BASE64, ({ const void *_x = p; _x; }), ({ size_t _y = n; _y; })
|
||||||
#define JSON_BUILD_ID128(id) _JSON_BUILD_ID128, ({ sd_id128_t _x = id; _x; })
|
#define JSON_BUILD_ID128(id) _JSON_BUILD_ID128, ({ sd_id128_t _x = id; _x; })
|
||||||
|
#define JSON_BUILD_BYTE_ARRAY(v, n) _JSON_BUILD_BYTE_ARRAY, ({ const void *_x = v; _x; }), ({ size_t _y = n; _y; })
|
||||||
|
|
||||||
int json_build(JsonVariant **ret, ...);
|
int json_build(JsonVariant **ret, ...);
|
||||||
int json_buildv(JsonVariant **ret, va_list ap);
|
int json_buildv(JsonVariant **ret, va_list ap);
|
||||||
|
|
Loading…
Reference in a new issue