From f604856eabab164982d9c8efbd8c617d5977b2b0 Mon Sep 17 00:00:00 2001 From: cyan317 <120398799+cindyyan317@users.noreply.github.com> Date: Tue, 28 Mar 2023 09:07:10 +0100 Subject: [PATCH] Use JSS string (#563) #565 --- src/rpc/ngHandlers/AccountChannels.cpp | 67 +++++----- src/rpc/ngHandlers/AccountChannels.h | 13 +- src/rpc/ngHandlers/AccountCurrencies.cpp | 27 ++-- src/rpc/ngHandlers/AccountCurrencies.h | 7 +- src/rpc/ngHandlers/BookOffers.cpp | 48 ++++--- src/rpc/ngHandlers/BookOffers.h | 20 +-- src/rpc/ngHandlers/GatewayBalances.cpp | 39 +++--- src/rpc/ngHandlers/GatewayBalances.h | 9 +- src/rpc/ngHandlers/LedgerEntry.cpp | 120 +++++++++--------- src/rpc/ngHandlers/LedgerEntry.h | 55 ++++---- src/rpc/ngHandlers/TransactionEntry.cpp | 17 ++- src/rpc/ngHandlers/TransactionEntry.h | 7 +- .../rpc/handlers/AccountChannelsTest.cpp | 8 +- 13 files changed, 224 insertions(+), 213 deletions(-) diff --git a/src/rpc/ngHandlers/AccountChannels.cpp b/src/rpc/ngHandlers/AccountChannels.cpp index aeeb6963..29ee6e46 100644 --- a/src/rpc/ngHandlers/AccountChannels.cpp +++ b/src/rpc/ngHandlers/AccountChannels.cpp @@ -18,7 +18,6 @@ //============================================================================== #include -#include #include namespace RPCng { @@ -126,34 +125,34 @@ tag_invoke( { auto const& jsonObject = jv.as_object(); AccountChannelsHandler::Input input; - input.account = jv.at("account").as_string().c_str(); - if (jsonObject.contains("limit")) + input.account = jv.at(JS(account)).as_string().c_str(); + if (jsonObject.contains(JS(limit))) { - input.limit = jv.at("limit").as_int64(); + input.limit = jv.at(JS(limit)).as_int64(); } - if (jsonObject.contains("marker")) + if (jsonObject.contains(JS(marker))) { - input.marker = jv.at("marker").as_string().c_str(); + input.marker = jv.at(JS(marker)).as_string().c_str(); } - if (jsonObject.contains("ledger_hash")) + if (jsonObject.contains(JS(ledger_hash))) { - input.ledgerHash = jv.at("ledger_hash").as_string().c_str(); + input.ledgerHash = jv.at(JS(ledger_hash)).as_string().c_str(); } - if (jsonObject.contains("destination_account")) + if (jsonObject.contains(JS(destination_account))) { input.destinationAccount = - jv.at("destination_account").as_string().c_str(); + jv.at(JS(destination_account)).as_string().c_str(); } - if (jsonObject.contains("ledger_index")) + if (jsonObject.contains(JS(ledger_index))) { - if (!jsonObject.at("ledger_index").is_string()) + if (!jsonObject.at(JS(ledger_index)).is_string()) { - input.ledgerIndex = jv.at("ledger_index").as_int64(); + input.ledgerIndex = jv.at(JS(ledger_index)).as_int64(); } - else if (jsonObject.at("ledger_index").as_string() != "validated") + else if (jsonObject.at(JS(ledger_index)).as_string() != "validated") { input.ledgerIndex = - std::stoi(jv.at("ledger_index").as_string().c_str()); + std::stoi(jv.at(JS(ledger_index)).as_string().c_str()); } } @@ -168,14 +167,14 @@ tag_invoke( { boost::json::object obj; obj = { - {"account", output.account}, - {"ledger_hash", output.ledgerHash}, - {"ledger_index", output.ledgerIndex}, - {"validated", output.validated}, - {"limit", output.limit}, - {"channels", output.channels}}; + {JS(account), output.account}, + {JS(ledger_hash), output.ledgerHash}, + {JS(ledger_index), output.ledgerIndex}, + {JS(validated), output.validated}, + {JS(limit), output.limit}, + {JS(channels), output.channels}}; if (output.marker) - obj["marker"] = output.marker.value(); + obj[JS(marker)] = output.marker.value(); jv = obj; } @@ -187,24 +186,24 @@ tag_invoke( { boost::json::object obj; obj = { - {"channel_id", channel.channelID}, - {"account", channel.account}, - {"account_destination", channel.accountDestination}, - {"amount", channel.amount}, - {"balance", channel.balance}, - {"settle_delay", channel.settleDelay}}; + {JS(channel_id), channel.channelID}, + {JS(account), channel.account}, + {JS(destination_account), channel.accountDestination}, + {JS(amount), channel.amount}, + {JS(balance), channel.balance}, + {JS(settle_delay), channel.settleDelay}}; if (channel.publicKey) - obj["public_key"] = *(channel.publicKey); + obj[JS(public_key)] = *(channel.publicKey); if (channel.publicKeyHex) - obj["public_key_hex"] = *(channel.publicKeyHex); + obj[JS(public_key_hex)] = *(channel.publicKeyHex); if (channel.expiration) - obj["expiration"] = *(channel.expiration); + obj[JS(expiration)] = *(channel.expiration); if (channel.cancelAfter) - obj["cancel_after"] = *(channel.cancelAfter); + obj[JS(cancel_after)] = *(channel.cancelAfter); if (channel.sourceTag) - obj["source_tag"] = *(channel.sourceTag); + obj[JS(source_tag)] = *(channel.sourceTag); if (channel.destinationTag) - obj["destination_tag"] = *(channel.destinationTag); + obj[JS(destination_tag)] = *(channel.destinationTag); jv = obj; } } // namespace RPCng diff --git a/src/rpc/ngHandlers/AccountChannels.h b/src/rpc/ngHandlers/AccountChannels.h index 4a5ef53a..1911ec25 100644 --- a/src/rpc/ngHandlers/AccountChannels.h +++ b/src/rpc/ngHandlers/AccountChannels.h @@ -20,6 +20,7 @@ #pragma once #include +#include #include #include @@ -86,12 +87,12 @@ public: { // clang-format off static const RpcSpec rpcSpec = { - {"account", validation::Required{}, validation::AccountValidator}, - {"destination_account", validation::Type{},validation::AccountValidator}, - {"ledger_hash", validation::Uint256HexStringValidator}, - {"limit", validation::Type{},validation::Between{10,400}}, - {"ledger_index", validation::LedgerIndexValidator}, - {"marker", validation::MarkerValidator} + {JS(account), validation::Required{}, validation::AccountValidator}, + {JS(destination_account), validation::Type{},validation::AccountValidator}, + {JS(ledger_hash), validation::Uint256HexStringValidator}, + {JS(limit), validation::Type{},validation::Between{10,400}}, + {JS(ledger_index), validation::LedgerIndexValidator}, + {JS(marker), validation::MarkerValidator} }; // clang-format on diff --git a/src/rpc/ngHandlers/AccountCurrencies.cpp b/src/rpc/ngHandlers/AccountCurrencies.cpp index e5b5a17d..f884b1dd 100644 --- a/src/rpc/ngHandlers/AccountCurrencies.cpp +++ b/src/rpc/ngHandlers/AccountCurrencies.cpp @@ -17,7 +17,6 @@ */ //============================================================================== -#include #include namespace RPCng { @@ -91,11 +90,11 @@ tag_invoke( AccountCurrenciesHandler::Output const& output) { jv = { - {"ledger_hash", output.ledgerHash}, - {"ledger_index", output.ledgerIndex}, - {"validated", output.validated}, - {"receive_currencies", output.receiveCurrencies}, - {"send_currencies", output.sendCurrencies}}; + {JS(ledger_hash), output.ledgerHash}, + {JS(ledger_index), output.ledgerIndex}, + {JS(validated), output.validated}, + {JS(receive_currencies), output.receiveCurrencies}, + {JS(send_currencies), output.sendCurrencies}}; } AccountCurrenciesHandler::Input @@ -105,21 +104,21 @@ tag_invoke( { auto const& jsonObject = jv.as_object(); AccountCurrenciesHandler::Input input; - input.account = jv.at("account").as_string().c_str(); - if (jsonObject.contains("ledger_hash")) + input.account = jv.at(JS(account)).as_string().c_str(); + if (jsonObject.contains(JS(ledger_hash))) { - input.ledgerHash = jv.at("ledger_hash").as_string().c_str(); + input.ledgerHash = jv.at(JS(ledger_hash)).as_string().c_str(); } - if (jsonObject.contains("ledger_index")) + if (jsonObject.contains(JS(ledger_index))) { - if (!jsonObject.at("ledger_index").is_string()) + if (!jsonObject.at(JS(ledger_index)).is_string()) { - input.ledgerIndex = jv.at("ledger_index").as_int64(); + input.ledgerIndex = jv.at(JS(ledger_index)).as_int64(); } - else if (jsonObject.at("ledger_index").as_string() != "validated") + else if (jsonObject.at(JS(ledger_index)).as_string() != "validated") { input.ledgerIndex = - std::stoi(jv.at("ledger_index").as_string().c_str()); + std::stoi(jv.at(JS(ledger_index)).as_string().c_str()); } } return input; diff --git a/src/rpc/ngHandlers/AccountCurrencies.h b/src/rpc/ngHandlers/AccountCurrencies.h index c3537a6a..9fbd18a3 100644 --- a/src/rpc/ngHandlers/AccountCurrencies.h +++ b/src/rpc/ngHandlers/AccountCurrencies.h @@ -20,6 +20,7 @@ #pragma once #include +#include #include #include @@ -64,9 +65,9 @@ public: spec() const { static const RpcSpec rpcSpec = { - {"account", validation::Required{}, validation::AccountValidator}, - {"ledger_hash", validation::Uint256HexStringValidator}, - {"ledger_index", validation::LedgerIndexValidator}}; + {JS(account), validation::Required{}, validation::AccountValidator}, + {JS(ledger_hash), validation::Uint256HexStringValidator}, + {JS(ledger_index), validation::LedgerIndexValidator}}; return rpcSpec; } diff --git a/src/rpc/ngHandlers/BookOffers.cpp b/src/rpc/ngHandlers/BookOffers.cpp index a2d13e3d..679f8883 100644 --- a/src/rpc/ngHandlers/BookOffers.cpp +++ b/src/rpc/ngHandlers/BookOffers.cpp @@ -71,9 +71,9 @@ tag_invoke( BookOffersHandler::Output const& output) { jv = boost::json::object{ - {"ledger_hash", output.ledgerHash}, - {"ledger_index", output.ledgerIndex}, - {"offers", output.offers}, + {JS(ledger_hash), output.ledgerHash}, + {JS(ledger_index), output.ledgerIndex}, + {JS(offers), output.offers}, }; } @@ -86,46 +86,54 @@ tag_invoke( auto const& jsonObject = jv.as_object(); ripple::to_currency( input.getsCurrency, - jv.at("taker_gets").as_object().at("currency").as_string().c_str()); + jv.at(JS(taker_gets)).as_object().at(JS(currency)).as_string().c_str()); ripple::to_currency( input.paysCurrency, - jv.at("taker_pays").as_object().at("currency").as_string().c_str()); - if (jv.at("taker_gets").as_object().contains("issuer")) + jv.at(JS(taker_pays)).as_object().at(JS(currency)).as_string().c_str()); + if (jv.at(JS(taker_gets)).as_object().contains(JS(issuer))) { ripple::to_issuer( input.getsID, - jv.at("taker_gets").as_object().at("issuer").as_string().c_str()); + jv.at(JS(taker_gets)) + .as_object() + .at(JS(issuer)) + .as_string() + .c_str()); } - if (jv.at("taker_pays").as_object().contains("issuer")) + if (jv.at(JS(taker_pays)).as_object().contains(JS(issuer))) { ripple::to_issuer( input.paysID, - jv.at("taker_pays").as_object().at("issuer").as_string().c_str()); + jv.at(JS(taker_pays)) + .as_object() + .at(JS(issuer)) + .as_string() + .c_str()); } - if (jsonObject.contains("ledger_hash")) + if (jsonObject.contains(JS(ledger_hash))) { - input.ledgerHash = jv.at("ledger_hash").as_string().c_str(); + input.ledgerHash = jv.at(JS(ledger_hash)).as_string().c_str(); } - if (jsonObject.contains("ledger_index")) + if (jsonObject.contains(JS(ledger_index))) { - if (!jsonObject.at("ledger_index").is_string()) + if (!jsonObject.at(JS(ledger_index)).is_string()) { - input.ledgerIndex = jv.at("ledger_index").as_int64(); + input.ledgerIndex = jv.at(JS(ledger_index)).as_int64(); } - else if (jsonObject.at("ledger_index").as_string() != "validated") + else if (jsonObject.at(JS(ledger_index)).as_string() != "validated") { input.ledgerIndex = - std::stoi(jv.at("ledger_index").as_string().c_str()); + std::stoi(jv.at(JS(ledger_index)).as_string().c_str()); } } - if (jsonObject.contains("taker")) + if (jsonObject.contains(JS(taker))) { input.taker = - RPC::accountFromStringStrict(jv.at("taker").as_string().c_str()); + RPC::accountFromStringStrict(jv.at(JS(taker)).as_string().c_str()); } - if (jsonObject.contains("limit")) + if (jsonObject.contains(JS(limit))) { - input.limit = jv.at("limit").as_int64(); + input.limit = jv.at(JS(limit)).as_int64(); } return input; diff --git a/src/rpc/ngHandlers/BookOffers.h b/src/rpc/ngHandlers/BookOffers.h index 3a25351b..958c8d92 100644 --- a/src/rpc/ngHandlers/BookOffers.h +++ b/src/rpc/ngHandlers/BookOffers.h @@ -66,38 +66,38 @@ public: spec() const { static const RpcSpec rpcSpec = { - {"taker_gets", + {JS(taker_gets), validation::Required{}, validation::Type{}, validation::Section{ - {"currency", + {JS(currency), validation::Required{}, validation::WithCustomError{ validation::CurrencyValidator, RPC::Status(RPC::RippledError::rpcDST_AMT_MALFORMED)}}, - {"issuer", + {JS(issuer), validation::WithCustomError{ validation::IssuerValidator, RPC::Status(RPC::RippledError::rpcDST_ISR_MALFORMED)}}}}, - {"taker_pays", + {JS(taker_pays), validation::Required{}, validation::Type{}, validation::Section{ - {"currency", + {JS(currency), validation::Required{}, validation::WithCustomError{ validation::CurrencyValidator, RPC::Status(RPC::RippledError::rpcSRC_CUR_MALFORMED)}}, - {"issuer", + {JS(issuer), validation::WithCustomError{ validation::IssuerValidator, RPC::Status(RPC::RippledError::rpcSRC_ISR_MALFORMED)}}}}, - {"taker", validation::AccountValidator}, - {"limit", + {JS(taker), validation::AccountValidator}, + {JS(limit), validation::Type{}, validation::Between{1, 100}}, - {"ledger_hash", validation::Uint256HexStringValidator}, - {"ledger_index", validation::LedgerIndexValidator}}; + {JS(ledger_hash), validation::Uint256HexStringValidator}, + {JS(ledger_index), validation::LedgerIndexValidator}}; return rpcSpec; } diff --git a/src/rpc/ngHandlers/GatewayBalances.cpp b/src/rpc/ngHandlers/GatewayBalances.cpp index b1303fd8..ad624384 100644 --- a/src/rpc/ngHandlers/GatewayBalances.cpp +++ b/src/rpc/ngHandlers/GatewayBalances.cpp @@ -17,7 +17,6 @@ */ //============================================================================== -#include #include namespace RPCng { @@ -154,7 +153,7 @@ tag_invoke( { obligations[ripple::to_string(k)] = v.getText(); } - obj["obligations"] = std::move(obligations); + obj[JS(obligations)] = std::move(obligations); } auto const toJson = @@ -181,17 +180,17 @@ tag_invoke( }; if (auto balances = toJson(output.hotBalances); balances.size()) - obj["balances"] = balances; + obj[JS(balances)] = balances; // we don't have frozen_balances field in the // document:https://xrpl.org/gateway_balances.html#gateway_balances if (auto balances = toJson(output.frozenBalances); balances.size()) - obj["frozen_balances"] = balances; + obj[JS(frozen_balances)] = balances; if (auto balances = toJson(output.assets); balances.size()) - obj["assets"] = balances; - obj["account"] = output.accountID; - obj["ledger_index"] = output.ledgerIndex; - obj["ledger_hash"] = output.ledgerHash; + obj[JS(assets)] = balances; + obj[JS(account)] = output.accountID; + obj[JS(ledger_index)] = output.ledgerIndex; + obj[JS(ledger_hash)] = output.ledgerHash; if (output.overflow) obj["overflow"] = true; jv = std::move(obj); @@ -204,33 +203,33 @@ tag_invoke( { auto const& jsonObject = jv.as_object(); GatewayBalancesHandler::Input input; - input.account = jv.at("account").as_string().c_str(); - if (jsonObject.contains("ledger_hash")) + input.account = jv.at(JS(account)).as_string().c_str(); + if (jsonObject.contains(JS(ledger_hash))) { - input.ledgerHash = jv.at("ledger_hash").as_string().c_str(); + input.ledgerHash = jv.at(JS(ledger_hash)).as_string().c_str(); } - if (jsonObject.contains("ledger_index")) + if (jsonObject.contains(JS(ledger_index))) { - if (!jsonObject.at("ledger_index").is_string()) + if (!jsonObject.at(JS(ledger_index)).is_string()) { - input.ledgerIndex = jv.at("ledger_index").as_int64(); + input.ledgerIndex = jv.at(JS(ledger_index)).as_int64(); } - else if (jsonObject.at("ledger_index").as_string() != "validated") + else if (jsonObject.at(JS(ledger_index)).as_string() != "validated") { input.ledgerIndex = - std::stoi(jv.at("ledger_index").as_string().c_str()); + std::stoi(jv.at(JS(ledger_index)).as_string().c_str()); } } - if (jsonObject.contains("hotwallet")) + if (jsonObject.contains(JS(hotwallet))) { - if (jsonObject.at("hotwallet").is_string()) + if (jsonObject.at(JS(hotwallet)).is_string()) { input.hotWallets.insert(*RPC::accountFromStringStrict( - jv.at("hotwallet").as_string().c_str())); + jv.at(JS(hotwallet)).as_string().c_str())); } else { - auto const& hotWallets = jv.at("hotwallet").as_array(); + auto const& hotWallets = jv.at(JS(hotwallet)).as_array(); std::transform( hotWallets.begin(), hotWallets.end(), diff --git a/src/rpc/ngHandlers/GatewayBalances.h b/src/rpc/ngHandlers/GatewayBalances.h index fa722a09..f564cc00 100644 --- a/src/rpc/ngHandlers/GatewayBalances.h +++ b/src/rpc/ngHandlers/GatewayBalances.h @@ -20,6 +20,7 @@ #pragma once #include +#include #include #include @@ -104,10 +105,10 @@ public: }}; static const RpcSpec rpcSpec = { - {"account", validation::Required{}, validation::AccountValidator}, - {"ledger_hash", validation::Uint256HexStringValidator}, - {"ledger_index", validation::LedgerIndexValidator}, - {"hotwallet", hotWalletValidator}}; + {JS(account), validation::Required{}, validation::AccountValidator}, + {JS(ledger_hash), validation::Uint256HexStringValidator}, + {JS(ledger_index), validation::LedgerIndexValidator}, + {JS(hotwallet), hotWalletValidator}}; return rpcSpec; } diff --git a/src/rpc/ngHandlers/LedgerEntry.cpp b/src/rpc/ngHandlers/LedgerEntry.cpp index ae7acd77..012ce6bd 100644 --- a/src/rpc/ngHandlers/LedgerEntry.cpp +++ b/src/rpc/ngHandlers/LedgerEntry.cpp @@ -17,7 +17,6 @@ */ //============================================================================== -#include #include #include @@ -49,51 +48,52 @@ LedgerEntryHandler::process( else if (input.offer) { auto const id = ripple::parseBase58( - input.offer->at("account").as_string().c_str()); - key = ripple::keylet::offer( - *id, - boost::json::value_to(input.offer->at("seq"))) - .key; + input.offer->at(JS(account)).as_string().c_str()); + key = + ripple::keylet::offer( + *id, + boost::json::value_to(input.offer->at(JS(seq)))) + .key; } else if (input.rippleStateAccount) { auto const id1 = ripple::parseBase58( - input.rippleStateAccount->at("accounts") + input.rippleStateAccount->at(JS(accounts)) .as_array() .at(0) .as_string() .c_str()); auto const id2 = ripple::parseBase58( - input.rippleStateAccount->at("accounts") + input.rippleStateAccount->at(JS(accounts)) .as_array() .at(1) .as_string() .c_str()); auto const currency = ripple::to_currency( - input.rippleStateAccount->at("currency").as_string().c_str()); + input.rippleStateAccount->at(JS(currency)).as_string().c_str()); key = ripple::keylet::line(*id1, *id2, currency).key; } else if (input.escrow) { auto const id = ripple::parseBase58( - input.escrow->at("owner").as_string().c_str()); - key = - ripple::keylet::escrow(*id, input.escrow->at("seq").as_int64()).key; + input.escrow->at(JS(owner)).as_string().c_str()); + key = ripple::keylet::escrow(*id, input.escrow->at(JS(seq)).as_int64()) + .key; } else if (input.depositPreauth) { auto const owner = ripple::parseBase58( - input.depositPreauth->at("owner").as_string().c_str()); + input.depositPreauth->at(JS(owner)).as_string().c_str()); auto const authorized = ripple::parseBase58( - input.depositPreauth->at("authorized").as_string().c_str()); + input.depositPreauth->at(JS(authorized)).as_string().c_str()); key = ripple::keylet::depositPreauth(*owner, *authorized).key; } else if (input.ticket) { auto const id = ripple::parseBase58( - input.ticket->at("account").as_string().c_str()); + input.ticket->at(JS(account)).as_string().c_str()); key = ripple::getTicketIndex( - *id, input.ticket->at("ticket_seq").as_int64()); + *id, input.ticket->at(JS(ticket_seq)).as_int64()); } else { @@ -146,28 +146,28 @@ LedgerEntryHandler::composeKeyFromDirectory( boost::json::object const& directory) const noexcept { // can not specify both dir_root and owner. - if (directory.contains("dir_root") && directory.contains("owner")) + if (directory.contains(JS(dir_root)) && directory.contains(JS(owner))) return RPC::Status{ RPC::RippledError::rpcINVALID_PARAMS, "mayNotSpecifyBothDirRootAndOwner"}; // at least one should availiable - if (!(directory.contains("dir_root") || directory.contains("owner"))) + if (!(directory.contains(JS(dir_root)) || directory.contains(JS(owner)))) return RPC::Status{ RPC::RippledError::rpcINVALID_PARAMS, "missingOwnerOrDirRoot"}; - uint64_t const subIndex = directory.contains("sub_index") - ? boost::json::value_to(directory.at("sub_index")) + uint64_t const subIndex = directory.contains(JS(sub_index)) + ? boost::json::value_to(directory.at(JS(sub_index))) : 0; - if (directory.contains("dir_root")) + if (directory.contains(JS(dir_root))) { ripple::uint256 const uDirRoot{ - directory.at("dir_root").as_string().c_str()}; + directory.at(JS(dir_root)).as_string().c_str()}; return ripple::keylet::page(uDirRoot, subIndex).key; } auto const ownerID = ripple::parseBase58( - directory.at("owner").as_string().c_str()); + directory.at(JS(owner)).as_string().c_str()); return ripple::keylet::page(ripple::keylet::ownerDir(*ownerID), subIndex) .key; } @@ -179,17 +179,17 @@ tag_invoke( LedgerEntryHandler::Output const& output) { auto object = boost::json::object{ - {"ledger_hash", output.ledgerHash}, - {"ledger_index", output.ledgerIndex}, - {"validated", output.validated}, - {"index", output.index}}; + {JS(ledger_hash), output.ledgerHash}, + {JS(ledger_index), output.ledgerIndex}, + {JS(validated), output.validated}, + {JS(index), output.index}}; if (output.nodeBinary) { - object["node_binary"] = *(output.nodeBinary); + object[JS(node_binary)] = *(output.nodeBinary); } else { - object["node"] = *(output.node); + object[JS(node)] = *(output.node); } jv = std::move(object); } @@ -201,37 +201,37 @@ tag_invoke( { auto const& jsonObject = jv.as_object(); LedgerEntryHandler::Input input; - if (jsonObject.contains("ledger_hash")) + if (jsonObject.contains(JS(ledger_hash))) { - input.ledgerHash = jv.at("ledger_hash").as_string().c_str(); + input.ledgerHash = jv.at(JS(ledger_hash)).as_string().c_str(); } - if (jsonObject.contains("ledger_index")) + if (jsonObject.contains(JS(ledger_index))) { - if (!jsonObject.at("ledger_index").is_string()) + if (!jsonObject.at(JS(ledger_index)).is_string()) { - input.ledgerIndex = jv.at("ledger_index").as_int64(); + input.ledgerIndex = jv.at(JS(ledger_index)).as_int64(); } - else if (jsonObject.at("ledger_index").as_string() != "validated") + else if (jsonObject.at(JS(ledger_index)).as_string() != "validated") { input.ledgerIndex = - std::stoi(jv.at("ledger_index").as_string().c_str()); + std::stoi(jv.at(JS(ledger_index)).as_string().c_str()); } } - if (jsonObject.contains("binary")) + if (jsonObject.contains(JS(binary))) { - input.binary = jv.at("binary").as_bool(); + input.binary = jv.at(JS(binary)).as_bool(); } // check all the protential index static auto const indexFieldTypeMap = std::unordered_map{ - {"index", ripple::ltANY}, - {"directory", ripple::ltDIR_NODE}, - {"offer", ripple::ltOFFER}, - {"check", ripple::ltCHECK}, - {"escrow", ripple::ltESCROW}, - {"payment_channel", ripple::ltPAYCHAN}, - {"deposit_preauth", ripple::ltDEPOSIT_PREAUTH}, - {"ticket", ripple::ltTICKET}}; + {JS(index), ripple::ltANY}, + {JS(directory), ripple::ltDIR_NODE}, + {JS(offer), ripple::ltOFFER}, + {JS(check), ripple::ltCHECK}, + {JS(escrow), ripple::ltESCROW}, + {JS(payment_channel), ripple::ltPAYCHAN}, + {JS(deposit_preauth), ripple::ltDEPOSIT_PREAUTH}, + {JS(ticket), ripple::ltTICKET}}; auto const indexFieldType = std::find_if( indexFieldTypeMap.begin(), @@ -247,34 +247,34 @@ tag_invoke( input.expectedType = indexFieldType->second; } // check if request for account root - else if (jsonObject.contains("account_root")) + else if (jsonObject.contains(JS(account_root))) { - input.accountRoot = jv.at("account_root").as_string().c_str(); + input.accountRoot = jv.at(JS(account_root)).as_string().c_str(); } // no need to check if_object again, validator only allows string or object - else if (jsonObject.contains("directory")) + else if (jsonObject.contains(JS(directory))) { - input.directory = jv.at("directory").as_object(); + input.directory = jv.at(JS(directory)).as_object(); } - else if (jsonObject.contains("offer")) + else if (jsonObject.contains(JS(offer))) { - input.offer = jv.at("offer").as_object(); + input.offer = jv.at(JS(offer)).as_object(); } - else if (jsonObject.contains("ripple_state")) + else if (jsonObject.contains(JS(ripple_state))) { - input.rippleStateAccount = jv.at("ripple_state").as_object(); + input.rippleStateAccount = jv.at(JS(ripple_state)).as_object(); } - else if (jsonObject.contains("escrow")) + else if (jsonObject.contains(JS(escrow))) { - input.escrow = jv.at("escrow").as_object(); + input.escrow = jv.at(JS(escrow)).as_object(); } - else if (jsonObject.contains("deposit_preauth")) + else if (jsonObject.contains(JS(deposit_preauth))) { - input.depositPreauth = jv.at("deposit_preauth").as_object(); + input.depositPreauth = jv.at(JS(deposit_preauth)).as_object(); } - else if (jsonObject.contains("ticket")) + else if (jsonObject.contains(JS(ticket))) { - input.ticket = jv.at("ticket").as_object(); + input.ticket = jv.at(JS(ticket)).as_object(); } return input; } diff --git a/src/rpc/ngHandlers/LedgerEntry.h b/src/rpc/ngHandlers/LedgerEntry.h index 2a2f948b..6ffb0526 100644 --- a/src/rpc/ngHandlers/LedgerEntry.h +++ b/src/rpc/ngHandlers/LedgerEntry.h @@ -20,6 +20,7 @@ #pragma once #include +#include #include #include @@ -102,81 +103,83 @@ public: }}; static const RpcSpec rpcSpec = { - {"binary", validation::Type{}}, - {"ledger_hash", validation::Uint256HexStringValidator}, - {"ledger_index", validation::LedgerIndexValidator}, - {"index", validation::Uint256HexStringValidator}, - {"account_root", validation::AccountBase58Validator}, - {"check", validation::Uint256HexStringValidator}, - {"deposit_preauth", + {JS(binary), validation::Type{}}, + {JS(ledger_hash), validation::Uint256HexStringValidator}, + {JS(ledger_index), validation::LedgerIndexValidator}, + {JS(index), validation::Uint256HexStringValidator}, + {JS(account_root), validation::AccountBase58Validator}, + {JS(check), validation::Uint256HexStringValidator}, + {JS(deposit_preauth), validation::Type{}, validation::IfType{ validation::Uint256HexStringValidator}, validation::IfType{ validation::Section{ - {"owner", + {JS(owner), validation::Required{}, validation::AccountBase58Validator}, - {"authorized", + {JS(authorized), validation::Required{}, validation::AccountBase58Validator}, }, }}, - {"directory", + {JS(directory), validation::Type{}, validation::IfType{ validation::Uint256HexStringValidator}, validation::IfType{validation::Section{ - {"owner", validation::AccountBase58Validator}, - {"dir_root", validation::Uint256HexStringValidator}, - {"sub_index", validation::Type{}}}}}, - {"escrow", + {JS(owner), validation::AccountBase58Validator}, + {JS(dir_root), validation::Uint256HexStringValidator}, + {JS(sub_index), validation::Type{}}}}}, + {JS(escrow), validation::Type{}, validation::IfType{ validation::Uint256HexStringValidator}, validation::IfType{ validation::Section{ - {"owner", + {JS(owner), validation::Required{}, validation::AccountBase58Validator}, - {"seq", + {JS(seq), validation::Required{}, validation::Type{}}, }, }}, - {"offer", + {JS(offer), validation::Type{}, validation::IfType{ validation::Uint256HexStringValidator}, validation::IfType{ validation::Section{ - {"account", + {JS(account), validation::Required{}, validation::AccountBase58Validator}, - {"seq", + {JS(seq), validation::Required{}, validation::Type{}}, }, }}, - {"payment_channel", validation::Uint256HexStringValidator}, - {"ripple_state", + {JS(payment_channel), validation::Uint256HexStringValidator}, + {JS(ripple_state), validation::Type{}, validation::Section{ - {"accounts", validation::Required{}, rippleStateAccountsCheck}, - {"currency", + {JS(accounts), + validation::Required{}, + rippleStateAccountsCheck}, + {JS(currency), validation::Required{}, validation::CurrencyValidator}, }}, - {"ticket", + {JS(ticket), validation::Type{}, validation::IfType{ validation::Uint256HexStringValidator}, validation::IfType{ validation::Section{ - {"account", + {JS(account), validation::Required{}, validation::AccountBase58Validator}, - {"ticket_seq", + {JS(ticket_seq), validation::Required{}, validation::Type{}}, }, diff --git a/src/rpc/ngHandlers/TransactionEntry.cpp b/src/rpc/ngHandlers/TransactionEntry.cpp index b848b79b..88fd9595 100644 --- a/src/rpc/ngHandlers/TransactionEntry.cpp +++ b/src/rpc/ngHandlers/TransactionEntry.cpp @@ -17,7 +17,6 @@ */ //============================================================================== -#include #include namespace RPCng { @@ -87,21 +86,21 @@ tag_invoke( auto const& jsonObject = jv.as_object(); TransactionEntryHandler::Input input; - input.txHash = jv.at("tx_hash").as_string().c_str(); - if (jsonObject.contains("ledger_hash")) + input.txHash = jv.at(JS(tx_hash)).as_string().c_str(); + if (jsonObject.contains(JS(ledger_hash))) { - input.ledgerHash = jv.at("ledger_hash").as_string().c_str(); + input.ledgerHash = jv.at(JS(ledger_hash)).as_string().c_str(); } - if (jsonObject.contains("ledger_index")) + if (jsonObject.contains(JS(ledger_index))) { - if (!jsonObject.at("ledger_index").is_string()) + if (!jsonObject.at(JS(ledger_index)).is_string()) { - input.ledgerIndex = jv.at("ledger_index").as_int64(); + input.ledgerIndex = jv.at(JS(ledger_index)).as_int64(); } - else if (jsonObject.at("ledger_index").as_string() != "validated") + else if (jsonObject.at(JS(ledger_index)).as_string() != "validated") { input.ledgerIndex = - std::stoi(jv.at("ledger_index").as_string().c_str()); + std::stoi(jv.at(JS(ledger_index)).as_string().c_str()); } } return input; diff --git a/src/rpc/ngHandlers/TransactionEntry.h b/src/rpc/ngHandlers/TransactionEntry.h index 2ef6c3a2..2c980402 100644 --- a/src/rpc/ngHandlers/TransactionEntry.h +++ b/src/rpc/ngHandlers/TransactionEntry.h @@ -20,6 +20,7 @@ #pragma once #include +#include #include #include @@ -61,11 +62,11 @@ public: spec() const { static const RpcSpec rpcSpec = { - {"tx_hash", + {JS(tx_hash), validation::Required{}, validation::Uint256HexStringValidator}, - {"ledger_hash", validation::Uint256HexStringValidator}, - {"ledger_index", validation::LedgerIndexValidator}}; + {JS(ledger_hash), validation::Uint256HexStringValidator}, + {JS(ledger_index), validation::LedgerIndexValidator}}; return rpcSpec; } diff --git a/unittests/rpc/handlers/AccountChannelsTest.cpp b/unittests/rpc/handlers/AccountChannelsTest.cpp index 83eb297b..7174244a 100644 --- a/unittests/rpc/handlers/AccountChannelsTest.cpp +++ b/unittests/rpc/handlers/AccountChannelsTest.cpp @@ -381,7 +381,7 @@ TEST_F(RPCAccountHandlerTest, DefaultParameterTest) { "channel_id":"E6DBAFC99223B42257915A63DFC6B0C032D4070F9A574B255AD97466726FC321", "account":"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", - "account_destination":"rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun", + "destination_account":"rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun", "amount":"100", "balance":"10", "settle_delay":32, @@ -391,7 +391,7 @@ TEST_F(RPCAccountHandlerTest, DefaultParameterTest) { "channel_id":"E6DBAFC99223B42257915A63DFC6B0C032D4070F9A574B255AD97466726FC322", "account":"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", - "account_destination":"rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun", + "destination_account":"rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun", "amount":"100", "balance":"10", "settle_delay":32, @@ -634,7 +634,7 @@ TEST_F(RPCAccountHandlerTest, OptionalResponseField) { "channel_id":"E6DBAFC99223B42257915A63DFC6B0C032D4070F9A574B255AD97466726FC321", "account":"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", - "account_destination":"rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun", + "destination_account":"rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun", "amount":"100", "balance":"10", "settle_delay":32, @@ -648,7 +648,7 @@ TEST_F(RPCAccountHandlerTest, OptionalResponseField) { "channel_id":"E6DBAFC99223B42257915A63DFC6B0C032D4070F9A574B255AD97466726FC322", "account":"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", - "account_destination":"rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun", + "destination_account":"rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun", "amount":"100", "balance":"10", "settle_delay":32,