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 xrpl {
15
16AccountID const&
18{
19 return std::visit([&](auto&& issue) -> AccountID const& { return issue.getIssuer(); }, issue_);
20}
21
24{
25 return std::visit([&](auto&& issue) { return issue.getText(); }, issue_);
26}
27
28void
30{
31 std::visit([&](auto&& issue) { issue.setJson(jv); }, issue_);
32}
33
35Asset::operator()(Number const& number) const
36{
37 return STAmount{*this, number};
38}
39
41to_string(Asset const& asset)
42{
43 return std::visit([&](auto const& issue) { return to_string(issue); }, asset.value());
44}
45
46bool
48{
49 if (jv.isMember(jss::mpt_issuance_id))
50 return !(jv.isMember(jss::currency) || jv.isMember(jss::issuer));
51 return jv.isMember(jss::currency);
52}
53
54Asset
56{
57 if (!v.isMember(jss::currency) && !v.isMember(jss::mpt_issuance_id))
58 Throw<std::runtime_error>("assetFromJson must contain currency or mpt_issuance_id");
59
60 if (v.isMember(jss::currency))
61 return issueFromJson(v);
62 return mptIssueFromJson(v);
63}
64
65} // namespace xrpl
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:35
std::string getText() const
Definition Asset.cpp:23
value_type issue_
Definition Asset.h:32
AccountID const & getIssuer() const
Definition Asset.cpp:17
void setJson(Json::Value &jv) const
Definition Asset.cpp:29
constexpr value_type const & value() const
Definition Asset.h:155
Number is a floating point type that can represent a wide range of values.
Definition Number.h:208
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6
bool validJSONAsset(Json::Value const &jv)
Definition Asset.cpp:47
std::string to_string(base_uint< Bits, Tag > const &a)
Definition base_uint.h:598
base_uint< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
Definition AccountID.h:29
MPTIssue mptIssueFromJson(Json::Value const &jv)
Definition MPTIssue.cpp:58
Issue issueFromJson(Json::Value const &v)
Definition Issue.cpp:82
Asset assetFromJson(Json::Value const &jv)
Definition Asset.cpp:55
T visit(T... args)