mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-05-31 08:13:52 +02:00
Merge bitcoin/bitcoin#29277: RPC: access RPC arguments by name
30a6c99935rpc: access some args by name (stickies-v)bbb31269bfrpc: add named arg helper (stickies-v)13525e0c24rpc: add arg helper unit test (stickies-v) Pull request description: Adds string overloads for the `RPCHelpMan::Arg` and `RPCHelpMan::MaybeArg` helpers to be able to access RPC arguments by name instead of index number. Especially in RPCs with a large number of parameters, this can be quite helpful. Example usage: ```cpp const auto action{self.Arg<std::string>("action")}; ``` Most of the LoC is adding test coverage and documentation updates. No behaviour change. An alternative approach to #27788 with significantly less overhaul. ACKs for top commit: fjahr: Code review ACK30a6c99935maflcko: ACK30a6c99935🥑 ryanofsky: Code review ACK30a6c99935. Nice change! Implementation is surprisingly simple and additional unit test coverage is welcome, too. Tree-SHA512: 4904f5f914fe1d421d32f60edb7c5a028c8ea0f140a2f207a106b4752d441164e073066a6bf2e17693f859fe847815a96609d3cf521e0ac4178d8cd09362ea3d
This commit is contained in:
@@ -322,7 +322,7 @@ static RPCHelpMan addnode()
|
||||
},
|
||||
[&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
|
||||
{
|
||||
const std::string command{request.params[1].get_str()};
|
||||
const auto command{self.Arg<std::string>("command")};
|
||||
if (command != "onetry" && command != "add" && command != "remove") {
|
||||
throw std::runtime_error(
|
||||
self.ToString());
|
||||
@@ -331,9 +331,9 @@ static RPCHelpMan addnode()
|
||||
NodeContext& node = EnsureAnyNodeContext(request.context);
|
||||
CConnman& connman = EnsureConnman(node);
|
||||
|
||||
const std::string node_arg{request.params[0].get_str()};
|
||||
const auto node_arg{self.Arg<std::string>("node")};
|
||||
bool node_v2transport = connman.GetLocalServices() & NODE_P2P_V2;
|
||||
bool use_v2transport = self.MaybeArg<bool>(2).value_or(node_v2transport);
|
||||
bool use_v2transport = self.MaybeArg<bool>("v2transport").value_or(node_v2transport);
|
||||
|
||||
if (use_v2transport && !node_v2transport) {
|
||||
throw JSONRPCError(RPC_INVALID_PARAMETER, "Error: v2transport requested but not enabled (see -v2transport)");
|
||||
|
||||
Reference in New Issue
Block a user