allow user to specify no peer in doAccountLines (#193)

This commit is contained in:
Nathan Nichols
2022-06-23 13:18:44 -04:00
committed by GitHub
parent 5f5648470a
commit 59d7d1bc49
3 changed files with 36 additions and 3 deletions

View File

@@ -221,6 +221,32 @@ getAccount(
return Status{Error::rpcINVALID_PARAMS, field.to_string() + "Malformed"}; return Status{Error::rpcINVALID_PARAMS, field.to_string() + "Malformed"};
} }
Status
getOptionalAccount(
boost::json::object const& request,
std::optional<ripple::AccountID>& account,
boost::string_view const& field)
{
if (!request.contains(field))
{
account = {};
return {};
}
if (!request.at(field).is_string())
return Status{
Error::rpcINVALID_PARAMS, field.to_string() + "NotString"};
if (auto a = accountFromStringStrict(request.at(field).as_string().c_str());
a)
{
account = a.value();
return {};
}
return Status{Error::rpcINVALID_PARAMS, field.to_string() + "Malformed"};
}
Status Status
getAccount(boost::json::object const& request, ripple::AccountID& accountId) getAccount(boost::json::object const& request, ripple::AccountID& accountId)
{ {

View File

@@ -238,6 +238,12 @@ getAccount(
ripple::AccountID& destAccount, ripple::AccountID& destAccount,
boost::string_view const& field); boost::string_view const& field);
Status
getOptionalAccount(
boost::json::object const& request,
std::optional<ripple::AccountID>& account,
boost::string_view const& field);
Status Status
getTaker(boost::json::object const& request, ripple::AccountID& takerID); getTaker(boost::json::object const& request, ripple::AccountID& takerID);

View File

@@ -39,7 +39,7 @@ addLine(
auto lineQualityIn = viewLowest ? lowQualityIn : highQualityIn; auto lineQualityIn = viewLowest ? lowQualityIn : highQualityIn;
auto lineQualityOut = viewLowest ? lowQualityOut : highQualityOut; auto lineQualityOut = viewLowest ? lowQualityOut : highQualityOut;
if (peerAccount and peerAccount != lineAccountIDPeer) if (peerAccount && peerAccount != lineAccountIDPeer)
return; return;
if (!viewLowest) if (!viewLowest)
@@ -109,8 +109,9 @@ doAccountLines(Context const& context)
if (!rawAcct) if (!rawAcct)
return Status{Error::rpcACT_NOT_FOUND, "accountNotFound"}; return Status{Error::rpcACT_NOT_FOUND, "accountNotFound"};
ripple::AccountID peerAccount; std::optional<ripple::AccountID> peerAccount;
if (auto const status = getAccount(request, peerAccount, JS(peer)); status) if (auto const status = getOptionalAccount(request, peerAccount, JS(peer));
status)
return status; return status;
std::uint32_t limit; std::uint32_t limit;