rpc: Use type-safe exception to pass RPC help

This commit is contained in:
MarcoFalke
2025-06-02 13:46:42 +02:00
parent 5757de4ddd
commit eeeec1579e
3 changed files with 7 additions and 6 deletions

View File

@@ -97,11 +97,8 @@ std::string CRPCTable::help(const std::string& strCommand, const JSONRPCRequest&
UniValue unused_result;
if (setDone.insert(pcmd->unique_id).second)
pcmd->actor(jreq, unused_result, /*last_handler=*/true);
}
catch (const std::exception& e)
{
// Help text is returned in an exception
std::string strHelp = std::string(e.what());
} catch (const HelpResult& e) {
std::string strHelp{e.what()};
if (strCommand == "")
{
if (strHelp.find('\n') != std::string::npos)

View File

@@ -645,7 +645,7 @@ UniValue RPCHelpMan::HandleRequest(const JSONRPCRequest& request) const
* the user is asking for help information, and throw help when appropriate.
*/
if (request.mode == JSONRPCRequest::GET_HELP || !IsValidNumArgs(request.params.size())) {
throw std::runtime_error(ToString());
throw HelpResult{ToString()};
}
UniValue arg_mismatch{UniValue::VOBJ};
for (size_t i{0}; i < m_args.size(); ++i) {

View File

@@ -67,6 +67,10 @@ class FillableSigningProvider;
class CScript;
struct Sections;
struct HelpResult : std::runtime_error {
explicit HelpResult(const std::string& msg) : std::runtime_error{msg} {}
};
/**
* Gets all existing output types formatted for RPC help sections.
*