mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-25 21:39:05 +01:00
RPC: Add add OBJ_NAMED_PARAMS type
OBJ_NAMED_PARAMS type works the same as OBJ type except it registers the object keys to be accepted as top-level named-only RPC parameters. Generated documentation also lists the object keys seperately in a new "Named arguments" section of help text. Named-only RPC parameters have the same semantics as python keyword-only arguments (https://peps.python.org/pep-3102/). They are always required to be passed by name, so they don't affect interpretation of positional arguments, and aren't affected when positional arguments are added or removed. The new OBJ_NAMED_PARAMS type is used in the next commit to make it easier to pass options values to various RPC methods. Co-authored-by: Andrew Chow <github@achow101.com>
This commit is contained in:
@@ -139,6 +139,13 @@ struct RPCArg {
|
||||
STR,
|
||||
NUM,
|
||||
BOOL,
|
||||
OBJ_NAMED_PARAMS, //!< Special type that behaves almost exactly like
|
||||
//!< OBJ, defining an options object with a list of
|
||||
//!< pre-defined keys. The only difference between OBJ
|
||||
//!< and OBJ_NAMED_PARAMS is that OBJ_NAMED_PARMS
|
||||
//!< also allows the keys to be passed as top-level
|
||||
//!< named parameters, as a more convenient way to pass
|
||||
//!< options to the RPC method without nesting them.
|
||||
OBJ_USER_KEYS, //!< Special type where the user must set the keys e.g. to define multiple addresses; as opposed to e.g. an options object where the keys are predefined
|
||||
AMOUNT, //!< Special type representing a floating point amount (can be either NUM or STR)
|
||||
STR_HEX, //!< Special type that is a STR with only hex chars
|
||||
@@ -183,7 +190,7 @@ struct RPCArg {
|
||||
m_description{std::move(description)},
|
||||
m_opts{std::move(opts)}
|
||||
{
|
||||
CHECK_NONFATAL(type != Type::ARR && type != Type::OBJ && type != Type::OBJ_USER_KEYS);
|
||||
CHECK_NONFATAL(type != Type::ARR && type != Type::OBJ && type != Type::OBJ_NAMED_PARAMS && type != Type::OBJ_USER_KEYS);
|
||||
}
|
||||
|
||||
RPCArg(
|
||||
@@ -200,7 +207,7 @@ struct RPCArg {
|
||||
m_description{std::move(description)},
|
||||
m_opts{std::move(opts)}
|
||||
{
|
||||
CHECK_NONFATAL(type == Type::ARR || type == Type::OBJ || type == Type::OBJ_USER_KEYS);
|
||||
CHECK_NONFATAL(type == Type::ARR || type == Type::OBJ || type == Type::OBJ_NAMED_PARAMS || type == Type::OBJ_USER_KEYS);
|
||||
}
|
||||
|
||||
bool IsOptional() const;
|
||||
@@ -369,7 +376,8 @@ public:
|
||||
UniValue GetArgMap() const;
|
||||
/** If the supplied number of args is neither too small nor too high */
|
||||
bool IsValidNumArgs(size_t num_args) const;
|
||||
std::vector<std::string> GetArgNames() const;
|
||||
//! Return list of arguments and whether they are named-only.
|
||||
std::vector<std::pair<std::string, bool>> GetArgNames() const;
|
||||
|
||||
const std::string m_name;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user