Plugins: allow to specify plugin option type in libplugin.c, then specify it to autoclean options

This commit is contained in:
darosior 2019-05-26 23:19:00 +02:00 committed by Rusty Russell
parent 3775a32659
commit 4640d18ef0
3 changed files with 12 additions and 7 deletions

View File

@ -84,10 +84,12 @@ int main(int argc, char *argv[])
setup_locale(); setup_locale();
plugin_main(argv, init, commands, ARRAY_SIZE(commands), plugin_main(argv, init, commands, ARRAY_SIZE(commands),
plugin_option("autocleaninvoice-cycle", plugin_option("autocleaninvoice-cycle",
"string",
"Perform cleanup of expired invoices every" "Perform cleanup of expired invoices every"
" given seconds, or do not autoclean if 0", " given seconds, or do not autoclean if 0",
u64_option, &cycle_seconds), u64_option, &cycle_seconds),
plugin_option("autocleaninvoice-expired-by", plugin_option("autocleaninvoice-expired-by",
"string",
"If expired invoice autoclean enabled," "If expired invoice autoclean enabled,"
" invoices that have expired for at least" " invoices that have expired for at least"
" this given seconds are cleaned", " this given seconds are cleaned",

View File

@ -439,11 +439,12 @@ handle_getmanifest(struct command *getmanifest_cmd,
for (size_t i = 0; i < tal_count(opts); i++) { for (size_t i = 0; i < tal_count(opts); i++) {
tal_append_fmt(&params, "{ 'name': '%s'," tal_append_fmt(&params, "{ 'name': '%s',"
" 'type': 'string'," " 'type': '%s',"
" 'description': '%s' }%s", " 'description': '%s' }%s",
opts[i].name, opts[i].name,
opts[i].description, opts[i].type,
i == tal_count(opts) - 1 ? "" : ",\n"); opts[i].description,
i == tal_count(opts) - 1 ? "" : ",\n");
} }
tal_append_fmt(&params, tal_append_fmt(&params,
@ -507,7 +508,6 @@ static struct command_result *handle_init(struct command *init_cmd,
&rpc_conn, &rpc_conn,
".allow-deprecated-apis"), ".allow-deprecated-apis"),
"true"); "true");
opttok = json_get_member(buf, params, "options"); opttok = json_get_member(buf, params, "options");
json_for_each_obj(i, t, opttok) { json_for_each_obj(i, t, opttok) {
char *opt = json_strdup(NULL, buf, t); char *opt = json_strdup(NULL, buf, t);
@ -695,6 +695,7 @@ void plugin_main(char *argv[],
while ((optname = va_arg(ap, const char *)) != NULL) { while ((optname = va_arg(ap, const char *)) != NULL) {
struct plugin_option o; struct plugin_option o;
o.name = optname; o.name = optname;
o.type = va_arg(ap, const char *);
o.description = va_arg(ap, const char *); o.description = va_arg(ap, const char *);
o.handle = va_arg(ap, char *(*)(const char *str, void *arg)); o.handle = va_arg(ap, char *(*)(const char *str, void *arg));
o.arg = va_arg(ap, void *); o.arg = va_arg(ap, void *);

View File

@ -29,6 +29,7 @@ struct plugin_command {
/* Create an array of these, one for each --option you support. */ /* Create an array of these, one for each --option you support. */
struct plugin_option { struct plugin_option {
const char *name; const char *name;
const char *type;
const char *description; const char *description;
char *(*handle)(const char *str, void *arg); char *(*handle)(const char *str, void *arg);
void *arg; void *arg;
@ -119,8 +120,9 @@ struct plugin_timer *plugin_timer(struct plugin_conn *rpc,
void PRINTF_FMT(2, 3) plugin_log(enum log_level l, const char *fmt, ...); void PRINTF_FMT(2, 3) plugin_log(enum log_level l, const char *fmt, ...);
/* Macro to define arguments */ /* Macro to define arguments */
#define plugin_option(name, description, set, arg) \ #define plugin_option(name, type, description, set, arg) \
(name), \ (name), \
(type), \
(description), \ (description), \
typesafe_cb_preargs(char *, void *, (set), (arg), const char *), \ typesafe_cb_preargs(char *, void *, (set), (arg), const char *), \
(arg) (arg)