mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-03-30 02:15:54 +02:00
RPCHelpMan: Check default values are given at compile-time
This commit is contained in:
@@ -12,6 +12,8 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <boost/variant.hpp>
|
||||
|
||||
class CKeyStore;
|
||||
class CPubKey;
|
||||
class CScript;
|
||||
@@ -39,11 +41,28 @@ struct RPCArg {
|
||||
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
|
||||
};
|
||||
|
||||
enum class Optional {
|
||||
/** Required arg */
|
||||
NO,
|
||||
/**
|
||||
* Optinal arg that is a named argument and has a default value of
|
||||
* `null`. When possible, the default value should be specified.
|
||||
*/
|
||||
OMITTED_NAMED_ARG,
|
||||
/**
|
||||
* Optional argument with default value omitted because they are
|
||||
* implicitly clear. That is, elements in an array or object may not
|
||||
* exist by default.
|
||||
* When possible, the default value should be specified.
|
||||
*/
|
||||
OMITTED,
|
||||
};
|
||||
using Fallback = boost::variant<Optional, /* default value for optional args */ std::string>;
|
||||
const std::string m_name; //!< The name of the arg (can be empty for inner args)
|
||||
const Type m_type;
|
||||
const std::vector<RPCArg> m_inner; //!< Only used for arrays or dicts
|
||||
const bool m_optional;
|
||||
const std::string m_default_value; //!< Only used for optional args
|
||||
const Fallback m_fallback;
|
||||
const std::string m_description;
|
||||
const std::string m_oneline_description; //!< Should be empty unless it is supposed to override the auto-generated summary line
|
||||
const std::vector<std::string> m_type_str; //!< Should be empty unless it is supposed to override the auto-generated type strings. Vector length is either 0 or 2, m_type_str.at(0) will override the type of the value in a key-value pair, m_type_str.at(1) will override the type in the argument description.
|
||||
@@ -51,15 +70,13 @@ struct RPCArg {
|
||||
RPCArg(
|
||||
const std::string& name,
|
||||
const Type& type,
|
||||
const bool opt,
|
||||
const std::string& default_val,
|
||||
const Fallback& fallback,
|
||||
const std::string& description,
|
||||
const std::string& oneline_description = "",
|
||||
const std::vector<std::string>& type_str = {})
|
||||
: m_name{name},
|
||||
m_type{type},
|
||||
m_optional{opt},
|
||||
m_default_value{default_val},
|
||||
m_fallback{fallback},
|
||||
m_description{description},
|
||||
m_oneline_description{oneline_description},
|
||||
m_type_str{type_str}
|
||||
@@ -70,8 +87,7 @@ struct RPCArg {
|
||||
RPCArg(
|
||||
const std::string& name,
|
||||
const Type& type,
|
||||
const bool opt,
|
||||
const std::string& default_val,
|
||||
const Fallback& fallback,
|
||||
const std::string& description,
|
||||
const std::vector<RPCArg>& inner,
|
||||
const std::string& oneline_description = "",
|
||||
@@ -79,8 +95,7 @@ struct RPCArg {
|
||||
: m_name{name},
|
||||
m_type{type},
|
||||
m_inner{inner},
|
||||
m_optional{opt},
|
||||
m_default_value{default_val},
|
||||
m_fallback{fallback},
|
||||
m_description{description},
|
||||
m_oneline_description{oneline_description},
|
||||
m_type_str{type_str}
|
||||
@@ -101,9 +116,8 @@ struct RPCArg {
|
||||
/**
|
||||
* Return the description string, including the argument type and whether
|
||||
* the argument is required.
|
||||
* implicitly_required is set for arguments in an array, which are neither optional nor required.
|
||||
*/
|
||||
std::string ToDescriptionString(bool implicitly_required = false) const;
|
||||
std::string ToDescriptionString() const;
|
||||
};
|
||||
|
||||
struct RPCResult {
|
||||
|
||||
Reference in New Issue
Block a user