diff options
author | Jon Atack <jon@atack.com> | 2023-03-19 10:19:06 -0700 |
---|---|---|
committer | Jon Atack <jon@atack.com> | 2023-04-10 10:41:35 -0700 |
commit | 4a1e479ca612056761e6247dd5b715dcd6824413 (patch) | |
tree | 20b7f0b7d9c711cef2aff6fa6c941e08c3fbe034 | |
parent | 079d8cdda8eeebe199fb6592fca2630c37662731 (diff) | |
download | bitcoin-4a1e479ca612056761e6247dd5b715dcd6824413.tar.xz |
rpc: add "warnings" field to RPCs {create,load,unload,restore}wallet
This new "warnings" field is a JSON array of strings intended to replace the
"warning" string field in these four RPCs, to better handle returning multiple
warning messages and for consistency with other wallet RPCs.
-rw-r--r-- | src/rpc/util.cpp | 17 | ||||
-rw-r--r-- | src/rpc/util.h | 1 | ||||
-rw-r--r-- | src/wallet/rpc/backup.cpp | 5 | ||||
-rw-r--r-- | src/wallet/rpc/wallet.cpp | 16 |
4 files changed, 39 insertions, 0 deletions
diff --git a/src/rpc/util.cpp b/src/rpc/util.cpp index f01944cd0b..f95ac4cb4b 100644 --- a/src/rpc/util.cpp +++ b/src/rpc/util.cpp @@ -1175,8 +1175,25 @@ UniValue GetServicesNames(ServiceFlags services) return servicesNames; } +/** Convert a vector of bilingual strings to a UniValue::VARR containing their original untranslated values. */ +[[nodiscard]] static UniValue BilingualStringsToUniValue(const std::vector<bilingual_str>& bilingual_strings) +{ + CHECK_NONFATAL(!bilingual_strings.empty()); + UniValue result{UniValue::VARR}; + for (const auto& s : bilingual_strings) { + result.push_back(s.original); + } + return result; +} + void PushWarnings(const UniValue& warnings, UniValue& obj) { if (warnings.empty()) return; obj.pushKV("warnings", warnings); } + +void PushWarnings(const std::vector<bilingual_str>& warnings, UniValue& obj) +{ + if (warnings.empty()) return; + obj.pushKV("warnings", BilingualStringsToUniValue(warnings)); +} diff --git a/src/rpc/util.h b/src/rpc/util.h index 15c73068b9..bb5c30a2f4 100644 --- a/src/rpc/util.h +++ b/src/rpc/util.h @@ -388,5 +388,6 @@ private: * @param[out] obj UniValue object to push the warnings array object to. */ void PushWarnings(const UniValue& warnings, UniValue& obj); +void PushWarnings(const std::vector<bilingual_str>& warnings, UniValue& obj); #endif // BITCOIN_RPC_UTIL_H diff --git a/src/wallet/rpc/backup.cpp b/src/wallet/rpc/backup.cpp index 026acf939b..76a736d14d 100644 --- a/src/wallet/rpc/backup.cpp +++ b/src/wallet/rpc/backup.cpp @@ -1904,6 +1904,10 @@ RPCHelpMan restorewallet() { {RPCResult::Type::STR, "name", "The wallet name if restored successfully."}, {RPCResult::Type::STR, "warning", "Warning messages, if any, related to restoring the wallet. Multiple messages will be delimited by newlines."}, + {RPCResult::Type::ARR, "warnings", /*optional=*/true, "Warning messages, if any, related to restoring the wallet.", + { + {RPCResult::Type::STR, "", ""}, + }}, } }, RPCExamples{ @@ -1934,6 +1938,7 @@ RPCHelpMan restorewallet() UniValue obj(UniValue::VOBJ); obj.pushKV("name", wallet->GetName()); obj.pushKV("warning", Join(warnings, Untranslated("\n")).original); + PushWarnings(warnings, obj); return obj; diff --git a/src/wallet/rpc/wallet.cpp b/src/wallet/rpc/wallet.cpp index 20cd697646..a28ddfb01b 100644 --- a/src/wallet/rpc/wallet.cpp +++ b/src/wallet/rpc/wallet.cpp @@ -208,6 +208,10 @@ static RPCHelpMan loadwallet() { {RPCResult::Type::STR, "name", "The wallet name if loaded successfully."}, {RPCResult::Type::STR, "warning", "Warning messages, if any, related to loading the wallet. Multiple messages will be delimited by newlines."}, + {RPCResult::Type::ARR, "warnings", /*optional=*/true, "Warning messages, if any, related to loading the wallet.", + { + {RPCResult::Type::STR, "", ""}, + }}, } }, RPCExamples{ @@ -241,6 +245,7 @@ static RPCHelpMan loadwallet() UniValue obj(UniValue::VOBJ); obj.pushKV("name", wallet->GetName()); obj.pushKV("warning", Join(warnings, Untranslated("\n")).original); + PushWarnings(warnings, obj); return obj; }, @@ -336,6 +341,10 @@ static RPCHelpMan createwallet() { {RPCResult::Type::STR, "name", "The wallet name if created successfully. If the wallet was created using a full path, the wallet_name will be the full path."}, {RPCResult::Type::STR, "warning", "Warning messages, if any, related to creating the wallet. Multiple messages will be delimited by newlines."}, + {RPCResult::Type::ARR, "warnings", /*optional=*/true, "Warning messages, if any, related to creating the wallet.", + { + {RPCResult::Type::STR, "", ""}, + }}, } }, RPCExamples{ @@ -406,6 +415,7 @@ static RPCHelpMan createwallet() UniValue obj(UniValue::VOBJ); obj.pushKV("name", wallet->GetName()); obj.pushKV("warning", Join(warnings, Untranslated("\n")).original); + PushWarnings(warnings, obj); return obj; }, @@ -423,6 +433,10 @@ static RPCHelpMan unloadwallet() }, RPCResult{RPCResult::Type::OBJ, "", "", { {RPCResult::Type::STR, "warning", "Warning messages, if any, related to unloading the wallet. Multiple messages will be delimited by newlines."}, + {RPCResult::Type::ARR, "warnings", /*optional=*/true, "Warning messages, if any, related to unloading the wallet.", + { + {RPCResult::Type::STR, "", ""}, + }}, }}, RPCExamples{ HelpExampleCli("unloadwallet", "wallet_name") @@ -465,6 +479,8 @@ static RPCHelpMan unloadwallet() UniValue result(UniValue::VOBJ); result.pushKV("warning", Join(warnings, Untranslated("\n")).original); + PushWarnings(warnings, result); + return result; }, }; |