mirror of
https://github.com/ElementsProject/lightning.git
synced 2024-11-19 09:54:16 +01:00
a3178b8177
Cleaned up remaining code. Reduced comment noise. Reverted macro names back to the original. Signed-off-by: Mark Beckwith <wythe@intrig.com>
87 lines
2.7 KiB
C
87 lines
2.7 KiB
C
#ifndef LIGHTNING_LIGHTNINGD_PARAM_H
|
|
#define LIGHTNING_LIGHTNINGD_PARAM_H
|
|
#include "config.h"
|
|
|
|
/*
|
|
Typesafe callback system for unmarshalling and validating json parameters.
|
|
|
|
Typical usage:
|
|
unsigned *cltv;
|
|
u64 *msatoshi;
|
|
const jsmntok_t *note;
|
|
u64 *expiry;
|
|
|
|
if (!param(cmd, buffer, params,
|
|
p_req("cltv", json_tok_number, &cltv),
|
|
p_opt("msatoshi", json_tok_u64, &msatoshi),
|
|
p_opt_tok("note", ¬e),
|
|
p_opt_def("expiry", json_tok_u64, &expiry, 3600),
|
|
NULL))
|
|
return;
|
|
|
|
See json_invoice() for a good example. The common callbacks can be found in
|
|
lightningd/json.c. Use them as an example for writing your own custom
|
|
callbacks.
|
|
*/
|
|
|
|
/*
|
|
* Parse the json tokens. @params can be an array of values or an object
|
|
* of named values.
|
|
*/
|
|
bool param(struct command *cmd, const char *buffer,
|
|
const jsmntok_t params[], ...);
|
|
|
|
/*
|
|
* The callback signature. Callbacks must return true on success. On failure they
|
|
* must call comand_fail and return false.
|
|
*/
|
|
typedef bool(*param_cbx)(struct command *cmd,
|
|
const char *name,
|
|
const char *buffer,
|
|
const jsmntok_t *tok,
|
|
void **arg);
|
|
|
|
/*
|
|
* Add a required parameter.
|
|
*/
|
|
#define p_req(name, cbx, arg) \
|
|
name"", \
|
|
true, \
|
|
(cbx), \
|
|
(arg) + 0*sizeof((cbx)((struct command *)NULL, \
|
|
(const char *)NULL, \
|
|
(const char *)NULL, \
|
|
(const jsmntok_t *)NULL, \
|
|
(arg)) == true)
|
|
|
|
/*
|
|
* Add an optional parameter. *arg is set to NULL if it isn't found.
|
|
*/
|
|
#define p_opt(name, cbx, arg) \
|
|
name"", \
|
|
false, \
|
|
(cbx), \
|
|
({ *arg = NULL; \
|
|
(arg) + 0*sizeof((cbx)((struct command *)NULL, \
|
|
(const char *)NULL, \
|
|
(const char *)NULL, \
|
|
(const jsmntok_t *)NULL, \
|
|
(arg)) == true); })
|
|
|
|
/*
|
|
* Add an optional parameter. *arg is set to @def if it isn't found.
|
|
*/
|
|
#define p_opt_def(name, cbx, arg, def) \
|
|
name"", \
|
|
false, \
|
|
(cbx), \
|
|
({ (*arg) = tal((cmd), typeof(**arg)); \
|
|
(**arg) = (def); \
|
|
(arg) + 0*sizeof((cbx)((struct command *)NULL, \
|
|
(const char *)NULL, \
|
|
(const char *)NULL, \
|
|
(const jsmntok_t *)NULL, \
|
|
(arg)) == true); })
|
|
|
|
#endif /* LIGHTNING_LIGHTNINGD_PARAM_H */
|