mirror of
https://github.com/XRPLF/clio.git
synced 2025-11-22 04:35:50 +00:00
Compare commits
4 Commits
release/2.
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9ea61ba6b9 | ||
|
|
19157dec74 | ||
|
|
42a6f516dc | ||
|
|
2cd8226a11 |
@@ -316,8 +316,11 @@ tag_invoke(boost::json::value_to_tag<AMMInfoHandler::Input>, boost::json::value
|
|||||||
if (jsonObject.contains(JS(ledger_hash)))
|
if (jsonObject.contains(JS(ledger_hash)))
|
||||||
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
if (jsonObject.contains(JS(asset)))
|
if (jsonObject.contains(JS(asset)))
|
||||||
input.issue1 = parseIssue(jsonObject.at(JS(asset)).as_object());
|
input.issue1 = parseIssue(jsonObject.at(JS(asset)).as_object());
|
||||||
|
|||||||
@@ -154,8 +154,11 @@ tag_invoke(boost::json::value_to_tag<AccountChannelsHandler::Input>, boost::json
|
|||||||
if (jsonObject.contains(JS(destination_account)))
|
if (jsonObject.contains(JS(destination_account)))
|
||||||
input.destinationAccount = boost::json::value_to<std::string>(jv.at(JS(destination_account)));
|
input.destinationAccount = boost::json::value_to<std::string>(jv.at(JS(destination_account)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -128,8 +128,11 @@ tag_invoke(boost::json::value_to_tag<AccountCurrenciesHandler::Input>, boost::js
|
|||||||
if (jsonObject.contains(JS(ledger_hash)))
|
if (jsonObject.contains(JS(ledger_hash)))
|
||||||
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -204,8 +204,11 @@ tag_invoke(boost::json::value_to_tag<AccountInfoHandler::Input>, boost::json::va
|
|||||||
if (jsonObject.contains(JS(ledger_hash)))
|
if (jsonObject.contains(JS(ledger_hash)))
|
||||||
input.ledgerHash = boost::json::value_to<std::string>(jsonObject.at(JS(ledger_hash)));
|
input.ledgerHash = boost::json::value_to<std::string>(jsonObject.at(JS(ledger_hash)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
if (jsonObject.contains(JS(signer_lists)))
|
if (jsonObject.contains(JS(signer_lists)))
|
||||||
input.signerLists = boost::json::value_to<JsonBool>(jsonObject.at(JS(signer_lists)));
|
input.signerLists = boost::json::value_to<JsonBool>(jsonObject.at(JS(signer_lists)));
|
||||||
|
|||||||
@@ -215,8 +215,11 @@ tag_invoke(boost::json::value_to_tag<AccountLinesHandler::Input>, boost::json::v
|
|||||||
if (jsonObject.contains(JS(ignore_default)))
|
if (jsonObject.contains(JS(ignore_default)))
|
||||||
input.ignoreDefault = jv.at(JS(ignore_default)).as_bool();
|
input.ignoreDefault = jv.at(JS(ignore_default)).as_bool();
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -164,8 +164,11 @@ tag_invoke(boost::json::value_to_tag<AccountMPTokenIssuancesHandler::Input>, boo
|
|||||||
if (jsonObject.contains(JS(ledger_hash)))
|
if (jsonObject.contains(JS(ledger_hash)))
|
||||||
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -139,8 +139,11 @@ tag_invoke(boost::json::value_to_tag<AccountMPTokensHandler::Input>, boost::json
|
|||||||
if (jsonObject.contains(JS(ledger_hash)))
|
if (jsonObject.contains(JS(ledger_hash)))
|
||||||
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -157,8 +157,11 @@ tag_invoke(boost::json::value_to_tag<AccountNFTsHandler::Input>, boost::json::va
|
|||||||
if (jsonObject.contains(JS(ledger_hash)))
|
if (jsonObject.contains(JS(ledger_hash)))
|
||||||
input.ledgerHash = boost::json::value_to<std::string>(jsonObject.at(JS(ledger_hash)));
|
input.ledgerHash = boost::json::value_to<std::string>(jsonObject.at(JS(ledger_hash)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
if (jsonObject.contains(JS(limit)))
|
if (jsonObject.contains(JS(limit)))
|
||||||
input.limit = util::integralValueAs<uint32_t>(jsonObject.at(JS(limit)));
|
input.limit = util::integralValueAs<uint32_t>(jsonObject.at(JS(limit)));
|
||||||
|
|||||||
@@ -153,8 +153,11 @@ tag_invoke(boost::json::value_to_tag<AccountObjectsHandler::Input>, boost::json:
|
|||||||
if (jsonObject.contains(JS(ledger_hash)))
|
if (jsonObject.contains(JS(ledger_hash)))
|
||||||
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
if (jsonObject.contains(JS(type))) {
|
if (jsonObject.contains(JS(type))) {
|
||||||
input.type =
|
input.type =
|
||||||
|
|||||||
@@ -169,8 +169,11 @@ tag_invoke(boost::json::value_to_tag<AccountOffersHandler::Input>, boost::json::
|
|||||||
if (jsonObject.contains(JS(ledger_hash)))
|
if (jsonObject.contains(JS(ledger_hash)))
|
||||||
input.ledgerHash = boost::json::value_to<std::string>(jsonObject.at(JS(ledger_hash)));
|
input.ledgerHash = boost::json::value_to<std::string>(jsonObject.at(JS(ledger_hash)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
if (jsonObject.contains(JS(limit)))
|
if (jsonObject.contains(JS(limit)))
|
||||||
input.limit = util::integralValueAs<uint32_t>(jsonObject.at(JS(limit)));
|
input.limit = util::integralValueAs<uint32_t>(jsonObject.at(JS(limit)));
|
||||||
|
|||||||
@@ -258,8 +258,10 @@ tag_invoke(boost::json::value_to_tag<AccountTxHandler::Input>, boost::json::valu
|
|||||||
input.ledgerHash = boost::json::value_to<std::string>(jsonObject.at(JS(ledger_hash)));
|
input.ledgerHash = boost::json::value_to<std::string>(jsonObject.at(JS(ledger_hash)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index))) {
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
||||||
if (not input.ledgerIndex.has_value()) {
|
if (expectedLedgerIndex.has_value()) {
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
} else {
|
||||||
// could not get the latest validated ledger seq here, using this flag to indicate that
|
// could not get the latest validated ledger seq here, using this flag to indicate that
|
||||||
input.usingValidatedLedger = true;
|
input.usingValidatedLedger = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,8 +90,11 @@ tag_invoke(boost::json::value_to_tag<BookChangesHandler::Input>, boost::json::va
|
|||||||
if (jsonObject.contains(JS(ledger_hash)))
|
if (jsonObject.contains(JS(ledger_hash)))
|
||||||
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -122,8 +122,11 @@ tag_invoke(boost::json::value_to_tag<BookOffersHandler::Input>, boost::json::val
|
|||||||
if (jsonObject.contains(JS(ledger_hash)))
|
if (jsonObject.contains(JS(ledger_hash)))
|
||||||
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
if (jsonObject.contains(JS(taker)))
|
if (jsonObject.contains(JS(taker)))
|
||||||
input.taker = accountFromStringStrict(boost::json::value_to<std::string>(jv.at(JS(taker))));
|
input.taker = accountFromStringStrict(boost::json::value_to<std::string>(jv.at(JS(taker))));
|
||||||
|
|||||||
@@ -145,8 +145,11 @@ tag_invoke(boost::json::value_to_tag<DepositAuthorizedHandler::Input>, boost::js
|
|||||||
if (jsonObject.contains(JS(ledger_hash)))
|
if (jsonObject.contains(JS(ledger_hash)))
|
||||||
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
if (jsonObject.contains(JS(credentials)))
|
if (jsonObject.contains(JS(credentials)))
|
||||||
input.credentials = boost::json::value_to<boost::json::array>(jv.at(JS(credentials)));
|
input.credentials = boost::json::value_to<boost::json::array>(jv.at(JS(credentials)));
|
||||||
|
|||||||
@@ -168,8 +168,11 @@ tag_invoke(boost::json::value_to_tag<FeatureHandler::Input>, boost::json::value
|
|||||||
if (jsonObject.contains(JS(ledger_hash)))
|
if (jsonObject.contains(JS(ledger_hash)))
|
||||||
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -249,8 +249,11 @@ tag_invoke(boost::json::value_to_tag<GatewayBalancesHandler::Input>, boost::json
|
|||||||
if (jsonObject.contains(JS(ledger_hash)))
|
if (jsonObject.contains(JS(ledger_hash)))
|
||||||
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
if (jsonObject.contains(JS(hotwallet))) {
|
if (jsonObject.contains(JS(hotwallet))) {
|
||||||
if (jsonObject.at(JS(hotwallet)).is_string()) {
|
if (jsonObject.at(JS(hotwallet)).is_string()) {
|
||||||
|
|||||||
@@ -263,8 +263,11 @@ tag_invoke(boost::json::value_to_tag<GetAggregatePriceHandler::Input>, boost::js
|
|||||||
if (jsonObject.contains(JS(ledger_hash)))
|
if (jsonObject.contains(JS(ledger_hash)))
|
||||||
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
for (auto const& oracle : jsonObject.at(JS(oracles)).as_array()) {
|
for (auto const& oracle : jsonObject.at(JS(oracles)).as_array()) {
|
||||||
input.oracles.push_back(
|
input.oracles.push_back(
|
||||||
|
|||||||
@@ -208,8 +208,11 @@ tag_invoke(boost::json::value_to_tag<LedgerHandler::Input>, boost::json::value c
|
|||||||
if (jsonObject.contains(JS(ledger_hash)))
|
if (jsonObject.contains(JS(ledger_hash)))
|
||||||
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
if (jsonObject.contains(JS(transactions)))
|
if (jsonObject.contains(JS(transactions)))
|
||||||
input.transactions = jv.at(JS(transactions)).as_bool();
|
input.transactions = jv.at(JS(transactions)).as_bool();
|
||||||
|
|||||||
@@ -210,8 +210,11 @@ tag_invoke(boost::json::value_to_tag<LedgerDataHandler::Input>, boost::json::val
|
|||||||
if (jsonObject.contains(JS(ledger_hash)))
|
if (jsonObject.contains(JS(ledger_hash)))
|
||||||
input.ledgerHash = boost::json::value_to<std::string>(jsonObject.at(JS(ledger_hash)));
|
input.ledgerHash = boost::json::value_to<std::string>(jsonObject.at(JS(ledger_hash)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
if (jsonObject.contains(JS(type)))
|
if (jsonObject.contains(JS(type)))
|
||||||
input.type = util::LedgerTypes::getLedgerEntryTypeFromStr(boost::json::value_to<std::string>(jv.at(JS(type))));
|
input.type = util::LedgerTypes::getLedgerEntryTypeFromStr(boost::json::value_to<std::string>(jv.at(JS(type))));
|
||||||
|
|||||||
@@ -305,8 +305,11 @@ tag_invoke(boost::json::value_to_tag<LedgerEntryHandler::Input>, boost::json::va
|
|||||||
if (jsonObject.contains(JS(ledger_hash)))
|
if (jsonObject.contains(JS(ledger_hash)))
|
||||||
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
if (jsonObject.contains(JS(binary)))
|
if (jsonObject.contains(JS(binary)))
|
||||||
input.binary = jv.at(JS(binary)).as_bool();
|
input.binary = jv.at(JS(binary)).as_bool();
|
||||||
|
|||||||
@@ -124,8 +124,11 @@ tag_invoke(boost::json::value_to_tag<MPTHoldersHandler::Input>, boost::json::val
|
|||||||
if (jsonObject.contains(JS(ledger_hash)))
|
if (jsonObject.contains(JS(ledger_hash)))
|
||||||
input.ledgerHash = jsonObject.at(JS(ledger_hash)).as_string().c_str();
|
input.ledgerHash = jsonObject.at(JS(ledger_hash)).as_string().c_str();
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
if (jsonObject.contains(JS(limit)))
|
if (jsonObject.contains(JS(limit)))
|
||||||
input.limit = util::integralValueAs<uint32_t>(jsonObject.at(JS(limit)));
|
input.limit = util::integralValueAs<uint32_t>(jsonObject.at(JS(limit)));
|
||||||
|
|||||||
@@ -215,8 +215,11 @@ tag_invoke(boost::json::value_to_tag<NFTHistoryHandler::Input>, boost::json::val
|
|||||||
if (jsonObject.contains(JS(ledger_hash)))
|
if (jsonObject.contains(JS(ledger_hash)))
|
||||||
input.ledgerHash = boost::json::value_to<std::string>(jsonObject.at(JS(ledger_hash)));
|
input.ledgerHash = boost::json::value_to<std::string>(jsonObject.at(JS(ledger_hash)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
if (jsonObject.contains(JS(binary)))
|
if (jsonObject.contains(JS(binary)))
|
||||||
input.binary = jsonObject.at(JS(binary)).as_bool();
|
input.binary = jsonObject.at(JS(binary)).as_bool();
|
||||||
|
|||||||
@@ -115,8 +115,11 @@ tag_invoke(boost::json::value_to_tag<NFTInfoHandler::Input>, boost::json::value
|
|||||||
if (jsonObject.contains(JS(ledger_hash)))
|
if (jsonObject.contains(JS(ledger_hash)))
|
||||||
input.ledgerHash = boost::json::value_to<std::string>(jsonObject.at(JS(ledger_hash)));
|
input.ledgerHash = boost::json::value_to<std::string>(jsonObject.at(JS(ledger_hash)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -194,8 +194,11 @@ tag_invoke(boost::json::value_to_tag<NFTOffersHandlerBase::Input>, boost::json::
|
|||||||
if (jsonObject.contains(JS(ledger_hash)))
|
if (jsonObject.contains(JS(ledger_hash)))
|
||||||
input.ledgerHash = boost::json::value_to<std::string>(jsonObject.at(JS(ledger_hash)));
|
input.ledgerHash = boost::json::value_to<std::string>(jsonObject.at(JS(ledger_hash)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
if (jsonObject.contains(JS(marker)))
|
if (jsonObject.contains(JS(marker)))
|
||||||
input.marker = boost::json::value_to<std::string>(jsonObject.at(JS(marker)));
|
input.marker = boost::json::value_to<std::string>(jsonObject.at(JS(marker)));
|
||||||
|
|||||||
@@ -136,8 +136,11 @@ tag_invoke(boost::json::value_to_tag<NFTsByIssuerHandler::Input>, boost::json::v
|
|||||||
if (jsonObject.contains(JS(ledger_hash)))
|
if (jsonObject.contains(JS(ledger_hash)))
|
||||||
input.ledgerHash = boost::json::value_to<std::string>(jsonObject.at(JS(ledger_hash)));
|
input.ledgerHash = boost::json::value_to<std::string>(jsonObject.at(JS(ledger_hash)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
if (jsonObject.contains(JS(limit)))
|
if (jsonObject.contains(JS(limit)))
|
||||||
input.limit = util::integralValueAs<uint32_t>(jsonObject.at(JS(limit)));
|
input.limit = util::integralValueAs<uint32_t>(jsonObject.at(JS(limit)));
|
||||||
|
|||||||
@@ -196,8 +196,11 @@ tag_invoke(boost::json::value_to_tag<NoRippleCheckHandler::Input>, boost::json::
|
|||||||
if (jsonObject.contains(JS(ledger_hash)))
|
if (jsonObject.contains(JS(ledger_hash)))
|
||||||
input.ledgerHash = boost::json::value_to<std::string>(jsonObject.at(JS(ledger_hash)));
|
input.ledgerHash = boost::json::value_to<std::string>(jsonObject.at(JS(ledger_hash)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,8 +109,11 @@ tag_invoke(boost::json::value_to_tag<TransactionEntryHandler::Input>, boost::jso
|
|||||||
if (jsonObject.contains(JS(ledger_hash)))
|
if (jsonObject.contains(JS(ledger_hash)))
|
||||||
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
input.ledgerHash = boost::json::value_to<std::string>(jv.at(JS(ledger_hash)));
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jv.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -177,8 +177,11 @@ tag_invoke(boost::json::value_to_tag<VaultInfoHandler::Input>, boost::json::valu
|
|||||||
if (jsonObject.contains(JS(vault_id)))
|
if (jsonObject.contains(JS(vault_id)))
|
||||||
input.vaultID = jsonObject.at(JS(vault_id)).as_string();
|
input.vaultID = jsonObject.at(JS(vault_id)).as_string();
|
||||||
|
|
||||||
if (jsonObject.contains(JS(ledger_index)))
|
if (jsonObject.contains(JS(ledger_index))) {
|
||||||
input.ledgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
auto const expectedLedgerIndex = util::getLedgerIndex(jsonObject.at(JS(ledger_index)));
|
||||||
|
if (expectedLedgerIndex.has_value())
|
||||||
|
input.ledgerIndex = *expectedLedgerIndex;
|
||||||
|
}
|
||||||
|
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,10 +23,13 @@
|
|||||||
|
|
||||||
#include <boost/json.hpp>
|
#include <boost/json.hpp>
|
||||||
#include <boost/json/object.hpp>
|
#include <boost/json/object.hpp>
|
||||||
|
#include <xrpl/beast/core/LexicalCast.h>
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cctype>
|
#include <cctype>
|
||||||
|
#include <charconv>
|
||||||
#include <concepts>
|
#include <concepts>
|
||||||
|
#include <expected>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
@@ -96,12 +99,11 @@ removeSecret(boost::json::object const& object)
|
|||||||
*
|
*
|
||||||
* @tparam Type The type to cast to
|
* @tparam Type The type to cast to
|
||||||
* @param value The JSON value to cast
|
* @param value The JSON value to cast
|
||||||
* @return Value casted to the requested type
|
* @return Value casted to the requested type or an error message
|
||||||
* @throws logic_error if the underlying number is neither int64 nor uint64
|
|
||||||
*/
|
*/
|
||||||
template <std::integral Type>
|
template <std::integral Type>
|
||||||
Type
|
std::expected<Type, std::string>
|
||||||
integralValueAs(boost::json::value const& value)
|
tryIntegralValueAs(boost::json::value const& value)
|
||||||
{
|
{
|
||||||
if (value.is_uint64())
|
if (value.is_uint64())
|
||||||
return static_cast<Type>(value.as_uint64());
|
return static_cast<Type>(value.as_uint64());
|
||||||
@@ -109,29 +111,49 @@ integralValueAs(boost::json::value const& value)
|
|||||||
if (value.is_int64())
|
if (value.is_int64())
|
||||||
return static_cast<Type>(value.as_int64());
|
return static_cast<Type>(value.as_int64());
|
||||||
|
|
||||||
throw std::logic_error("Value neither uint64 nor int64");
|
return std::unexpected("Value neither uint64 nor int64");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Detects the type of number stored in value and casts it back to the requested Type.
|
||||||
|
* @note This conversion can possibly cause wrapping around or UB. Use with caution.
|
||||||
|
*
|
||||||
|
* @tparam Type The type to cast to
|
||||||
|
* @param value The JSON value to cast
|
||||||
|
* @return Value casted to the requested type
|
||||||
|
* @throws logic_error if the underlying number is neither int64 nor uint64
|
||||||
|
*/
|
||||||
|
template <std::integral Type>
|
||||||
|
Type
|
||||||
|
integralValueAs(boost::json::value const& value)
|
||||||
|
{
|
||||||
|
auto expectedResult = tryIntegralValueAs<Type>(value);
|
||||||
|
if (expectedResult.has_value())
|
||||||
|
return *expectedResult;
|
||||||
|
|
||||||
|
throw std::logic_error(std::move(expectedResult).error());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Extracts ledger index from a JSON value which can be either a number or a string.
|
* @brief Extracts ledger index from a JSON value which can be either a number or a string.
|
||||||
*
|
*
|
||||||
* @param value The JSON value to extract ledger index from
|
* @param value The JSON value to extract ledger index from
|
||||||
* @return An optional containing the ledger index if it is a number; std::nullopt otherwise
|
* @return The extracted ledger index or an error message
|
||||||
* @throws logic_error comes from integralValueAs if the underlying number is neither int64 nor uint64
|
|
||||||
* @throws std::invalid_argument or std::out_of_range if the string cannot be converted to a number
|
|
||||||
*/
|
*/
|
||||||
[[nodiscard]] inline std::optional<uint32_t>
|
[[nodiscard]] inline std::expected<uint32_t, std::string>
|
||||||
getLedgerIndex(boost::json::value const& value)
|
getLedgerIndex(boost::json::value const& value)
|
||||||
{
|
{
|
||||||
std::optional<uint32_t> ledgerIndex;
|
|
||||||
|
|
||||||
if (not value.is_string()) {
|
if (not value.is_string()) {
|
||||||
ledgerIndex = util::integralValueAs<uint32_t>(value);
|
return tryIntegralValueAs<uint32_t>(value);
|
||||||
} else if (value.as_string() != "validated") {
|
|
||||||
ledgerIndex = std::stoi(value.as_string().c_str());
|
|
||||||
}
|
}
|
||||||
|
if (value.as_string() != "validated") {
|
||||||
|
uint32_t ledgerIndex{};
|
||||||
|
if (beast::lexicalCastChecked(ledgerIndex, value.as_string().c_str())) {
|
||||||
return ledgerIndex;
|
return ledgerIndex;
|
||||||
}
|
}
|
||||||
|
return std::unexpected("Invalid ledger index string");
|
||||||
|
}
|
||||||
|
return std::unexpected("'validated' ledger index is requested");
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace util
|
} // namespace util
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
//==============================================================================
|
//==============================================================================
|
||||||
|
|
||||||
#include "util/JsonUtils.hpp"
|
#include "util/JsonUtils.hpp"
|
||||||
|
#include "util/NameGenerator.hpp"
|
||||||
|
|
||||||
#include <boost/json/parse.hpp>
|
#include <boost/json/parse.hpp>
|
||||||
#include <boost/json/value.hpp>
|
#include <boost/json/value.hpp>
|
||||||
@@ -26,7 +27,8 @@
|
|||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <limits>
|
#include <limits>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <tuple>
|
#include <string>
|
||||||
|
#include <type_traits>
|
||||||
|
|
||||||
TEST(JsonUtils, RemoveSecrets)
|
TEST(JsonUtils, RemoveSecrets)
|
||||||
{
|
{
|
||||||
@@ -90,28 +92,123 @@ TEST(JsonUtils, integralValueAs)
|
|||||||
EXPECT_THROW(util::integralValueAs<int>(stringJson), std::logic_error);
|
EXPECT_THROW(util::integralValueAs<int>(stringJson), std::logic_error);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(JsonUtils, getLedgerIndex)
|
TEST(JsonUtils, tryIntegralValueAs)
|
||||||
{
|
{
|
||||||
auto const emptyJson = boost::json::value();
|
auto const expectedResultUint64 = static_cast<uint64_t>(std::numeric_limits<int32_t>::max()) + 1u;
|
||||||
EXPECT_THROW(std::ignore = util::getLedgerIndex(emptyJson), std::logic_error);
|
auto const uint64Json = boost::json::value(expectedResultUint64);
|
||||||
|
|
||||||
auto const boolJson = boost::json::value(true);
|
auto const expectedResultInt64 = static_cast<int64_t>(std::numeric_limits<int32_t>::max()) + 1u;
|
||||||
EXPECT_THROW(std::ignore = util::getLedgerIndex(emptyJson), std::logic_error);
|
auto const int64Json = boost::json::value(expectedResultInt64);
|
||||||
|
|
||||||
auto const numberJson = boost::json::value(12345);
|
auto checkHasValue = [&](boost::json::value const& jv, auto const& expectedValue) {
|
||||||
auto ledgerIndex = util::getLedgerIndex(numberJson);
|
using T = std::remove_cvref_t<decltype(expectedValue)>;
|
||||||
EXPECT_TRUE(ledgerIndex.has_value());
|
auto const res = util::tryIntegralValueAs<T>(jv);
|
||||||
EXPECT_EQ(ledgerIndex.value(), 12345u);
|
ASSERT_TRUE(res.has_value());
|
||||||
|
EXPECT_EQ(res.value(), expectedValue);
|
||||||
|
};
|
||||||
|
|
||||||
auto const validStringJson = boost::json::value("12345");
|
auto checkError = [&](boost::json::value const& jv) {
|
||||||
ledgerIndex = util::getLedgerIndex(validStringJson);
|
auto res = util::tryIntegralValueAs<int>(jv);
|
||||||
EXPECT_TRUE(ledgerIndex.has_value());
|
EXPECT_FALSE(res.has_value());
|
||||||
EXPECT_EQ(ledgerIndex.value(), 12345u);
|
EXPECT_EQ(res.error(), "Value neither uint64 nor int64");
|
||||||
|
};
|
||||||
|
|
||||||
auto const invalidStringJson = boost::json::value("invalid123");
|
// checks for uint64Json
|
||||||
EXPECT_THROW(std::ignore = util::getLedgerIndex(invalidStringJson), std::invalid_argument);
|
checkHasValue(uint64Json, std::numeric_limits<int32_t>::min());
|
||||||
|
checkHasValue(uint64Json, static_cast<uint32_t>(expectedResultUint64));
|
||||||
|
checkHasValue(uint64Json, static_cast<int64_t>(expectedResultUint64));
|
||||||
|
checkHasValue(uint64Json, expectedResultUint64);
|
||||||
|
|
||||||
auto const validatedJson = boost::json::value("validated");
|
// checks for int64Json
|
||||||
ledgerIndex = util::getLedgerIndex(validatedJson);
|
checkHasValue(int64Json, std::numeric_limits<int32_t>::min());
|
||||||
EXPECT_FALSE(ledgerIndex.has_value());
|
checkHasValue(int64Json, static_cast<uint32_t>(expectedResultInt64));
|
||||||
|
checkHasValue(int64Json, expectedResultInt64);
|
||||||
|
checkHasValue(int64Json, static_cast<uint64_t>(expectedResultInt64));
|
||||||
|
|
||||||
|
// non-integral inputs
|
||||||
|
checkError(boost::json::value());
|
||||||
|
checkError(boost::json::value(false));
|
||||||
|
checkError(boost::json::value(3.14));
|
||||||
|
checkError(boost::json::value("not a number"));
|
||||||
|
}
|
||||||
|
|
||||||
|
struct GetLedgerIndexParameterTestBundle {
|
||||||
|
std::string testName;
|
||||||
|
boost::json::value jv;
|
||||||
|
std::expected<uint32_t, std::string> expectedResult;
|
||||||
|
};
|
||||||
|
|
||||||
|
// parameterized test cases for parameters check
|
||||||
|
struct GetLedgerIndexParameterTest : ::testing::TestWithParam<GetLedgerIndexParameterTestBundle> {};
|
||||||
|
|
||||||
|
INSTANTIATE_TEST_CASE_P(
|
||||||
|
JsonUtils,
|
||||||
|
GetLedgerIndexParameterTest,
|
||||||
|
testing::Values(
|
||||||
|
GetLedgerIndexParameterTestBundle{
|
||||||
|
.testName = "EmptyValue",
|
||||||
|
.jv = boost::json::value(),
|
||||||
|
.expectedResult = std::unexpected{"Value neither uint64 nor int64"}
|
||||||
|
},
|
||||||
|
GetLedgerIndexParameterTestBundle{
|
||||||
|
.testName = "BoolValue",
|
||||||
|
.jv = boost::json::value(false),
|
||||||
|
.expectedResult = std::unexpected{"Value neither uint64 nor int64"}
|
||||||
|
},
|
||||||
|
GetLedgerIndexParameterTestBundle{
|
||||||
|
.testName = "NumberValue",
|
||||||
|
.jv = boost::json::value(123),
|
||||||
|
.expectedResult = 123u
|
||||||
|
},
|
||||||
|
GetLedgerIndexParameterTestBundle{
|
||||||
|
.testName = "StringNumberValue",
|
||||||
|
.jv = boost::json::value("123"),
|
||||||
|
.expectedResult = 123u
|
||||||
|
},
|
||||||
|
GetLedgerIndexParameterTestBundle{
|
||||||
|
.testName = "StringNumberWithPlusSignValue",
|
||||||
|
.jv = boost::json::value("+123"),
|
||||||
|
.expectedResult = 123u
|
||||||
|
},
|
||||||
|
GetLedgerIndexParameterTestBundle{
|
||||||
|
.testName = "StringEmptyValue",
|
||||||
|
.jv = boost::json::value(""),
|
||||||
|
.expectedResult = std::unexpected{"Invalid ledger index string"}
|
||||||
|
},
|
||||||
|
GetLedgerIndexParameterTestBundle{
|
||||||
|
.testName = "StringWithLeadingCharsValue",
|
||||||
|
.jv = boost::json::value("123invalid"),
|
||||||
|
.expectedResult = std::unexpected{"Invalid ledger index string"}
|
||||||
|
},
|
||||||
|
GetLedgerIndexParameterTestBundle{
|
||||||
|
.testName = "StringWithTrailingCharsValue",
|
||||||
|
.jv = boost::json::value("invalid123"),
|
||||||
|
.expectedResult = std::unexpected{"Invalid ledger index string"}
|
||||||
|
},
|
||||||
|
GetLedgerIndexParameterTestBundle{
|
||||||
|
.testName = "StringWithLeadingAndTrailingCharsValue",
|
||||||
|
.jv = boost::json::value("123invalid123"),
|
||||||
|
.expectedResult = std::unexpected{"Invalid ledger index string"}
|
||||||
|
},
|
||||||
|
GetLedgerIndexParameterTestBundle{
|
||||||
|
.testName = "ValidatedStringValue",
|
||||||
|
.jv = boost::json::value("validated"),
|
||||||
|
.expectedResult = std::unexpected{"'validated' ledger index is requested"}
|
||||||
|
}
|
||||||
|
),
|
||||||
|
tests::util::kNAME_GENERATOR
|
||||||
|
);
|
||||||
|
|
||||||
|
TEST_P(GetLedgerIndexParameterTest, getLedgerIndexParams)
|
||||||
|
{
|
||||||
|
auto const& testBundle = GetParam();
|
||||||
|
auto const ledgerIndex = util::getLedgerIndex(testBundle.jv);
|
||||||
|
|
||||||
|
if (testBundle.expectedResult.has_value()) {
|
||||||
|
EXPECT_TRUE(ledgerIndex.has_value());
|
||||||
|
EXPECT_EQ(ledgerIndex.value(), testBundle.expectedResult.value());
|
||||||
|
} else {
|
||||||
|
EXPECT_FALSE(ledgerIndex.has_value());
|
||||||
|
EXPECT_EQ(ledgerIndex.error(), testBundle.expectedResult.error());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user