rippled
Loading...
Searching...
No Matches
STIssue.h
1#pragma once
2
3#include <xrpl/basics/CountedObject.h>
4#include <xrpl/protocol/Asset.h>
5#include <xrpl/protocol/SField.h>
6#include <xrpl/protocol/STBase.h>
7#include <xrpl/protocol/Serializer.h>
8
9namespace xrpl {
10
11class STIssue final : public STBase, CountedObject<STIssue>
12{
13private:
15
16public:
18
19 STIssue() = default;
20 STIssue(STIssue const& rhs) = default;
21
22 explicit STIssue(SerialIter& sit, SField const& name);
23
24 template <AssetType A>
25 explicit STIssue(SField const& name, A const& issue);
26
27 explicit STIssue(SField const& name);
28
29 STIssue&
30 operator=(STIssue const& rhs) = default;
31
32 template <ValidIssueType TIss>
33 TIss const&
34 get() const;
35
36 template <ValidIssueType TIss>
37 bool
38 holds() const;
39
40 value_type const&
41 value() const noexcept;
42
43 void
44 setIssue(Asset const& issue);
45
47 getSType() const override;
48
49 std::string
50 getText() const override;
51
52 Json::Value getJson(JsonOptions) const override;
53
54 void
55 add(Serializer& s) const override;
56
57 bool
58 isEquivalent(STBase const& t) const override;
59
60 bool
61 isDefault() const override;
62
63 friend constexpr bool
64 operator==(STIssue const& lhs, STIssue const& rhs);
65
66 friend constexpr std::weak_ordering
67 operator<=>(STIssue const& lhs, STIssue const& rhs);
68
69 friend constexpr bool
70 operator==(STIssue const& lhs, Asset const& rhs);
71
72 friend constexpr std::weak_ordering
73 operator<=>(STIssue const& lhs, Asset const& rhs);
74
75private:
76 STBase*
77 copy(std::size_t n, void* buf) const override;
78 STBase*
79 move(std::size_t n, void* buf) override;
80
81 friend class detail::STVar;
82};
83
84template <AssetType A>
85STIssue::STIssue(SField const& name, A const& asset) : STBase{name}, asset_{asset}
86{
87 if (holds<Issue>() && !isConsistent(asset_.get<Issue>()))
88 Throw<std::runtime_error>("Invalid asset: currency and account native mismatch");
89}
90
92issueFromJson(SField const& name, Json::Value const& v);
93
94template <ValidIssueType TIss>
95bool
97{
98 return asset_.holds<TIss>();
99}
100
101template <ValidIssueType TIss>
102TIss const&
104{
105 if (!holds<TIss>(asset_))
106 Throw<std::runtime_error>("Asset doesn't hold the requested issue");
107 return std::get<TIss>(asset_);
108}
109
110inline STIssue::value_type const&
111STIssue::value() const noexcept
112{
113 return asset_;
114}
115
116inline void
118{
119 if (holds<Issue>() && !isConsistent(asset_.get<Issue>()))
120 Throw<std::runtime_error>("Invalid asset: currency and account native mismatch");
121
122 asset_ = asset;
123}
124
125constexpr bool
126operator==(STIssue const& lhs, STIssue const& rhs)
127{
128 return lhs.asset_ == rhs.asset_;
129}
130
132operator<=>(STIssue const& lhs, STIssue const& rhs)
133{
134 return lhs.asset_ <=> rhs.asset_;
135}
136
137constexpr bool
138operator==(STIssue const& lhs, Asset const& rhs)
139{
140 return lhs.asset_ == rhs;
141}
142
144operator<=>(STIssue const& lhs, Asset const& rhs)
145{
146 return lhs.asset_ <=> rhs;
147}
148
149} // namespace xrpl
Represents a JSON value.
Definition json_value.h:130
constexpr TIss const & get() const
constexpr bool holds() const
Definition Asset.h:130
Tracks the number of instances of an object.
A currency issued by an account.
Definition Issue.h:13
Identifies fields.
Definition SField.h:126
A type which can be exported to a well known binary format.
Definition STBase.h:115
void add(Serializer &s) const override
Definition STIssue.cpp:86
friend constexpr bool operator==(STIssue const &lhs, STIssue const &rhs)
Definition STIssue.h:126
STIssue & operator=(STIssue const &rhs)=default
bool isDefault() const override
Definition STIssue.cpp:114
friend constexpr std::weak_ordering operator<=>(STIssue const &lhs, STIssue const &rhs)
Definition STIssue.h:132
STIssue()=default
Asset asset_
Definition STIssue.h:14
friend class detail::STVar
Definition STIssue.h:81
STIssue(STIssue const &rhs)=default
SerializedTypeID getSType() const override
Definition STIssue.cpp:66
Json::Value getJson(JsonOptions) const override
Definition STIssue.cpp:78
void setIssue(Asset const &issue)
Definition STIssue.h:117
STBase * copy(std::size_t n, void *buf) const override
Definition STIssue.cpp:120
bool holds() const
Definition STIssue.h:96
TIss const & get() const
std::string getText() const override
Definition STIssue.cpp:72
STBase * move(std::size_t n, void *buf) override
Definition STIssue.cpp:126
bool isEquivalent(STBase const &t) const override
Definition STIssue.cpp:107
value_type const & value() const noexcept
Definition STIssue.h:111
T is_same_v
JSON (JavaScript Object Notation).
Definition json_errors.h:5
STL namespace.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
bool isConsistent(Book const &book)
Definition Book.cpp:10
Issue const & xrpIssue()
Returns an asset specifier that represents XRP.
Definition Issue.h:97
Issue issueFromJson(Json::Value const &v)
Definition Issue.cpp:82
SerializedTypeID
Definition SField.h:90
Note, should be treated as flags that can be | and &.
Definition STBase.h:17