]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
json: add generic cmdline parser for --json= switch
authorLennart Poettering <lennart@poettering.net>
Sat, 9 Jan 2021 15:58:46 +0000 (16:58 +0100)
committerLennart Poettering <lennart@poettering.net>
Sat, 9 Jan 2021 16:36:11 +0000 (17:36 +0100)
src/shared/json.c
src/shared/json.h

index 9a1a1787df9b983d0f1f2ff1ee22af5ef576be1c..d559111248ed8250c813d59d5b776f8038ce8102 100644 (file)
@@ -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",
index a69e1de5c054243f2e7ec31f5a9eb0521ac04e5b..aad73265133847b0eec32ef32d1a2a59fc4677d0 100644 (file)
@@ -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);