xrpld
Loading...
Searching...
No Matches
Asset.cpp
1#include <xrpl/protocol/Asset.h>
2
3#include <xrpl/basics/Number.h>
4#include <xrpl/basics/contract.h>
5#include <xrpl/json/json_value.h>
6#include <xrpl/protocol/AccountID.h>
7#include <xrpl/protocol/Concepts.h>
8#include <xrpl/protocol/Issue.h>
9#include <xrpl/protocol/MPTIssue.h>
10#include <xrpl/protocol/STAmount.h>
11#include <xrpl/protocol/jss.h>
12
13#include <ostream>
14#include <stdexcept>
15#include <string>
16#include <variant>
17
18namespace xrpl {
19
20AccountID const&
22{
23 return std::visit([&](auto&& issue) -> AccountID const& { return issue.getIssuer(); }, issue_);
24}
25
28{
29 return std::visit([&](auto&& issue) { return issue.getText(); }, issue_);
30}
31
32void
34{
35 std::visit([&](auto&& issue) { issue.setJson(jv); }, issue_);
36}
37
39Asset::operator()(Number const& number) const
40{
41 return STAmount{*this, number};
42}
43
45to_string(Asset const& asset)
46{
47 return std::visit([&](auto const& issue) { return to_string(issue); }, asset.value());
48}
49
50bool
52{
53 if (jv.isMember(jss::mpt_issuance_id))
54 return !(jv.isMember(jss::currency) || jv.isMember(jss::issuer));
55 return jv.isMember(jss::currency);
56}
57
58Asset
60{
61 if (!v.isMember(jss::currency) && !v.isMember(jss::mpt_issuance_id))
62 Throw<std::runtime_error>("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
70operator<<(std::ostream& os, Asset const& x)
71{
72 std::visit([&]<ValidIssueType TIss>(TIss const& issue) { os << issue; }, x.value());
73 return os;
74}
75
76} // namespace xrpl
Represents a JSON value.
Definition json_value.h:130
bool isMember(char const *key) const
Return true if the object has a member named key.
void setJson(json::Value &jv) const
Definition Asset.cpp:33
STAmount operator()(Number const &) const
Definition Asset.cpp:39
std::string getText() const
Definition Asset.cpp:27
value_type issue_
Definition Asset.h:51
AccountID const & getIssuer() const
Definition Asset.cpp:21
constexpr value_type const & value() const
Definition Asset.h:190
Number is a floating point type that can represent a wide range of values.
Definition Number.h:306
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
Issue issueFromJson(json::Value const &v)
Definition Issue.cpp:89
bool validJSONAsset(json::Value const &jv)
Definition Asset.cpp:51
MPTIssue mptIssueFromJson(json::Value const &jv)
Definition MPTIssue.cpp:67
std::ostream & operator<<(std::ostream &out, BaseUInt< Bits, Tag > const &u)
Definition base_uint.h:648
std::string to_string(BaseUInt< Bits, Tag > const &a)
Definition base_uint.h:633
BaseUInt< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
Definition AccountID.h:28
Asset assetFromJson(json::Value const &jv)
Definition Asset.cpp:59
XRPL_NO_SANITIZE_ADDRESS void Throw(Args &&... args)
Definition contract.h:49
T visit(T... args)