rippled
Loading...
Searching...
No Matches
Asset.cpp
1#include <xrpl/basics/contract.h>
2#include <xrpl/json/json_value.h>
3#include <xrpl/protocol/AccountID.h>
4#include <xrpl/protocol/Asset.h>
5#include <xrpl/protocol/Issue.h>
6#include <xrpl/protocol/MPTIssue.h>
7#include <xrpl/protocol/STAmount.h>
8#include <xrpl/protocol/jss.h>
9
10#include <stdexcept>
11#include <string>
12#include <variant>
13
14namespace ripple {
15
16AccountID const&
18{
19 return std::visit(
20 [&](auto&& issue) -> AccountID const& { return issue.getIssuer(); },
21 issue_);
22}
23
26{
27 return std::visit([&](auto&& issue) { return issue.getText(); }, issue_);
28}
29
30void
32{
33 std::visit([&](auto&& issue) { issue.setJson(jv); }, issue_);
34}
35
37Asset::operator()(Number const& number) const
38{
39 return STAmount{*this, number};
40}
41
43to_string(Asset const& asset)
44{
45 return std::visit(
46 [&](auto const& issue) { return to_string(issue); }, asset.value());
47}
48
49bool
51{
52 if (jv.isMember(jss::mpt_issuance_id))
53 return !(jv.isMember(jss::currency) || jv.isMember(jss::issuer));
54 return jv.isMember(jss::currency);
55}
56
57Asset
59{
60 if (!v.isMember(jss::currency) && !v.isMember(jss::mpt_issuance_id))
61 Throw<std::runtime_error>(
62 "assetFromJson must contain currency or mpt_issuance_id");
63
64 if (v.isMember(jss::currency))
65 return issueFromJson(v);
66 return mptIssueFromJson(v);
67}
68
69} // namespace ripple
Represents a JSON value.
Definition json_value.h:131
bool isMember(char const *key) const
Return true if the object has a member named key.
STAmount operator()(Number const &) const
Definition Asset.cpp:37
void setJson(Json::Value &jv) const
Definition Asset.cpp:31
constexpr value_type const & value() const
Definition Asset.h:137
AccountID const & getIssuer() const
Definition Asset.cpp:17
value_type issue_
Definition Asset.h:34
std::string getText() const
Definition Asset.cpp:25
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6
base_uint< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
Definition AccountID.h:29
Asset assetFromJson(Json::Value const &jv)
Definition Asset.cpp:58
MPTIssue mptIssueFromJson(Json::Value const &jv)
Definition MPTIssue.cpp:59
bool validJSONAsset(Json::Value const &jv)
Definition Asset.cpp:50
Issue issueFromJson(Json::Value const &v)
Definition Issue.cpp:76
std::string to_string(base_uint< Bits, Tag > const &a)
Definition base_uint.h:611
T visit(T... args)