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