55// file COPYING or http://www.opensource.org/licenses/mit-license.php.
66
77#include < rpc/client.h>
8+ #include < tinyformat.h>
89#include < util/system.h>
910
1011#include < set>
12+ #include < string>
13+ #include < string_view>
1114
1215class CRPCConvertParam
1316{
@@ -262,15 +265,15 @@ class CRPCConvertTable
262265 CRPCConvertTable ();
263266
264267 /* * Return arg_value as UniValue, and first parse it if it is a non-string parameter */
265- UniValue ArgToUniValue (const std::string& arg_value, const std::string& method, int param_idx)
268+ UniValue ArgToUniValue (std::string_view arg_value, const std::string& method, int param_idx)
266269 {
267- return members.count (std::make_pair ( method, param_idx) ) > 0 ? ParseNonRFCJSONValue (arg_value) : arg_value;
270+ return members.count ({ method, param_idx} ) > 0 ? ParseNonRFCJSONValue (arg_value) : arg_value;
268271 }
269272
270273 /* * Return arg_value as UniValue, and first parse it if it is a non-string parameter */
271- UniValue ArgToUniValue (const std::string& arg_value, const std::string& method, const std::string& param_name)
274+ UniValue ArgToUniValue (std::string_view arg_value, const std::string& method, const std::string& param_name)
272275 {
273- return membersByName.count (std::make_pair ( method, param_name) ) > 0 ? ParseNonRFCJSONValue (arg_value) : arg_value;
276+ return membersByName.count ({ method, param_name} ) > 0 ? ParseNonRFCJSONValue (arg_value) : arg_value;
274277 }
275278};
276279
@@ -287,22 +290,20 @@ static CRPCConvertTable rpcCvtTable;
287290/* * Non-RFC4627 JSON parser, accepts internal values (such as numbers, true, false, null)
288291 * as well as objects and arrays.
289292 */
290- UniValue ParseNonRFCJSONValue (const std::string& strVal )
293+ UniValue ParseNonRFCJSONValue (std::string_view raw )
291294{
292- UniValue jVal;
293- if (!jVal.read (std::string (" [" )+strVal+std::string (" ]" )) ||
294- !jVal.isArray () || jVal.size ()!=1 )
295- throw std::runtime_error (std::string (" Error parsing JSON: " ) + strVal);
296- return jVal[0 ];
295+ UniValue parsed;
296+ if (!parsed.read (raw)) throw std::runtime_error (tfm::format (" Error parsing JSON: %s" , raw));
297+ return parsed;
297298}
298299
299300UniValue RPCConvertValues (const std::string &strMethod, const std::vector<std::string> &strParams)
300301{
301302 UniValue params (UniValue::VARR);
302303
303304 for (unsigned int idx = 0 ; idx < strParams.size (); idx++) {
304- const std::string& strVal = strParams[idx];
305- params.push_back (rpcCvtTable.ArgToUniValue (strVal , strMethod, idx));
305+ std::string_view value{ strParams[idx]} ;
306+ params.push_back (rpcCvtTable.ArgToUniValue (value , strMethod, idx));
306307 }
307308
308309 return params;
@@ -313,15 +314,15 @@ UniValue RPCConvertNamedValues(const std::string &strMethod, const std::vector<s
313314 UniValue params (UniValue::VOBJ);
314315 UniValue positional_args{UniValue::VARR};
315316
316- for (const std::string & s: strParams) {
317+ for (std::string_view s: strParams) {
317318 size_t pos = s.find (' =' );
318319 if (pos == std::string::npos) {
319320 positional_args.push_back (rpcCvtTable.ArgToUniValue (s, strMethod, positional_args.size ()));
320321 continue ;
321322 }
322323
323- std::string name = s.substr (0 , pos);
324- std::string value = s.substr (pos+1 );
324+ std::string name{ s.substr (0 , pos)} ;
325+ std::string_view value{ s.substr (pos+1 )} ;
325326
326327 // Intentionally overwrite earlier named values with later ones as a
327328 // convenience for scripts and command line users that want to merge
0 commit comments