summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2021-01-09 16:58:46 +0100
committerLennart Poettering <lennart@poettering.net>2021-01-09 17:36:11 +0100
commitb95a05d0144fab154d77e35488df65b3e4fa7bb1 (patch)
treebb241bffd9a84e1dfd0fba16327103cfb92db956
parent10d7126365587e449ffe81b9ab7335be4e10cc68 (diff)
downloadsystemd-b95a05d0144fab154d77e35488df65b3e4fa7bb1.tar.gz
json: add generic cmdline parser for --json= switch
-rw-r--r--src/shared/json.c21
-rw-r--r--src/shared/json.h2
2 files changed, 23 insertions, 0 deletions
diff --git a/src/shared/json.c b/src/shared/json.c
index 9a1a1787df..d559111248 100644
--- a/src/shared/json.c
+++ b/src/shared/json.c
@@ -4459,6 +4459,27 @@ int json_variant_unhex(JsonVariant *v, void **ret, size_t *ret_size) {
return unhexmem(json_variant_string(v), (size_t) -1, ret, ret_size);
}
+int json_parse_cmdline_parameter_and_warn(const char *s, JsonFormatFlags *ret) {
+ assert(s);
+ assert(ret);
+
+ if (streq(s, "pretty"))
+ *ret = JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR_AUTO;
+ else if (streq(s, "short"))
+ *ret = JSON_FORMAT_NEWLINE;
+ else if (streq(s, "off"))
+ *ret = JSON_FORMAT_OFF;
+ else if (streq(s, "help")) {
+ puts("pretty\n"
+ "short\n"
+ "off");
+ return 0; /* 0 means → we showed a brief help, exit now */
+ } else
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown argument to --json= switch: %s", s);
+
+ return 1; /* 1 means → properly parsed */
+}
+
static const char* const json_variant_type_table[_JSON_VARIANT_TYPE_MAX] = {
[JSON_VARIANT_STRING] = "string",
[JSON_VARIANT_INTEGER] = "integer",
diff --git a/src/shared/json.h b/src/shared/json.h
index a69e1de5c0..aad7326513 100644
--- a/src/shared/json.h
+++ b/src/shared/json.h
@@ -357,5 +357,7 @@ int json_log_internal(JsonVariant *variant, int level, int error, const char *fi
int json_variant_unbase64(JsonVariant *v, void **ret, size_t *ret_size);
int json_variant_unhex(JsonVariant *v, void **ret, size_t *ret_size);
+int json_parse_cmdline_parameter_and_warn(const char *s, JsonFormatFlags *ret);
+
const char *json_variant_type_to_string(JsonVariantType t);
JsonVariantType json_variant_type_from_string(const char *s);