mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-03-03 10:46:58 +01:00
lightning-cli: human-readable printing for help.
And make it an option for now for other commands; consider making it the default. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
1ee44bdb47
commit
7d18ef9ecf
1 changed files with 81 additions and 3 deletions
|
@ -47,6 +47,68 @@ char *netaddr_name(const tal_t *ctx, const struct netaddr *a)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Returns number of tokens digested */
|
||||||
|
static size_t human_readable(const char *buffer, const jsmntok_t *t, char term)
|
||||||
|
{
|
||||||
|
size_t i, n;
|
||||||
|
|
||||||
|
switch (t->type) {
|
||||||
|
case JSMN_PRIMITIVE:
|
||||||
|
case JSMN_STRING:
|
||||||
|
for (i = t->start; i < t->end; i++) {
|
||||||
|
/* We only translate \n and \t. */
|
||||||
|
if (buffer[i] == '\\' && i + 1 < t->end) {
|
||||||
|
if (buffer[i+1] == 'n') {
|
||||||
|
fputc('\n', stdout);
|
||||||
|
i++;
|
||||||
|
continue;
|
||||||
|
} else if (buffer[i+1] == 't') {
|
||||||
|
fputc('\t', stdout);
|
||||||
|
i++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fputc(buffer[i], stdout);
|
||||||
|
}
|
||||||
|
fputc(term, stdout);
|
||||||
|
return 1;
|
||||||
|
case JSMN_ARRAY:
|
||||||
|
n = 1;
|
||||||
|
for (i = 0; i < t->size; i++)
|
||||||
|
n += human_readable(buffer, t + n, '\n');
|
||||||
|
return n;
|
||||||
|
case JSMN_OBJECT:
|
||||||
|
/* Elide single-field objects */
|
||||||
|
if (t->size == 1)
|
||||||
|
return human_readable(buffer, t + 2, '\n') + 3;
|
||||||
|
n = 1;
|
||||||
|
for (i = 0; i < t->size; i++) {
|
||||||
|
n += human_readable(buffer, t + n, '=');
|
||||||
|
n += human_readable(buffer, t + n, '\n');
|
||||||
|
}
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
enum format {
|
||||||
|
JSON,
|
||||||
|
HUMAN,
|
||||||
|
DEFAULT
|
||||||
|
};
|
||||||
|
|
||||||
|
static char *opt_set_human(enum format *format)
|
||||||
|
{
|
||||||
|
*format = HUMAN;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *opt_set_json(enum format *format)
|
||||||
|
{
|
||||||
|
*format = JSON;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int fd, i, off;
|
int fd, i, off;
|
||||||
|
@ -59,6 +121,7 @@ int main(int argc, char *argv[])
|
||||||
const tal_t *ctx = tal(NULL, char);
|
const tal_t *ctx = tal(NULL, char);
|
||||||
jsmn_parser parser;
|
jsmn_parser parser;
|
||||||
jsmnerr_t parserr;
|
jsmnerr_t parserr;
|
||||||
|
enum format format = DEFAULT;
|
||||||
|
|
||||||
err_set_progname(argv[0]);
|
err_set_progname(argv[0]);
|
||||||
jsmn_init(&parser);
|
jsmn_init(&parser);
|
||||||
|
@ -68,6 +131,11 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
opt_register_noarg("--help|-h", opt_usage_and_exit,
|
opt_register_noarg("--help|-h", opt_usage_and_exit,
|
||||||
"<command> [<params>...]", "Show this message. Use the command help (without hyphens -- \"lightning-cli help\") to get a list of all RPC commands");
|
"<command> [<params>...]", "Show this message. Use the command help (without hyphens -- \"lightning-cli help\") to get a list of all RPC commands");
|
||||||
|
opt_register_noarg("-H|--human-readable", opt_set_human, &format,
|
||||||
|
"Human-readable output (default for 'help')");
|
||||||
|
opt_register_noarg("-J|--json", opt_set_json, &format,
|
||||||
|
"JSON output (default unless 'help')");
|
||||||
|
|
||||||
opt_register_version();
|
opt_register_version();
|
||||||
|
|
||||||
opt_early_parse(argc, argv, opt_log_stderr_exit);
|
opt_early_parse(argc, argv, opt_log_stderr_exit);
|
||||||
|
@ -82,6 +150,13 @@ int main(int argc, char *argv[])
|
||||||
method = "help";
|
method = "help";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (format == DEFAULT) {
|
||||||
|
if (streq(method, "help"))
|
||||||
|
format = HUMAN;
|
||||||
|
else
|
||||||
|
format = JSON;
|
||||||
|
}
|
||||||
|
|
||||||
if (chdir(lightning_dir) != 0)
|
if (chdir(lightning_dir) != 0)
|
||||||
err(ERROR_TALKING_TO_LIGHTNINGD, "Moving into '%s'",
|
err(ERROR_TALKING_TO_LIGHTNINGD, "Moving into '%s'",
|
||||||
lightning_dir);
|
lightning_dir);
|
||||||
|
@ -177,9 +252,12 @@ int main(int argc, char *argv[])
|
||||||
json_tok_len(id), json_tok_contents(resp, id));
|
json_tok_len(id), json_tok_contents(resp, id));
|
||||||
|
|
||||||
if (!error || json_tok_is_null(resp, error)) {
|
if (!error || json_tok_is_null(resp, error)) {
|
||||||
printf("%.*s\n",
|
if (format == HUMAN)
|
||||||
json_tok_len(result),
|
human_readable(resp, result, '\n');
|
||||||
json_tok_contents(resp, result));
|
else
|
||||||
|
printf("%.*s\n",
|
||||||
|
json_tok_len(result),
|
||||||
|
json_tok_contents(resp, result));
|
||||||
tal_free(ctx);
|
tal_free(ctx);
|
||||||
opt_free_table();
|
opt_free_table();
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Add table
Reference in a new issue