xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
xrpld
rpc
Status.h
1
#pragma once
2
3
#include <xrpl/beast/utility/instrumentation.h>
4
#include <xrpl/json/json_value.h>
5
#include <xrpl/protocol/ErrorCodes.h>
6
#include <xrpl/protocol/TER.h>
7
8
#include <
exception
>
9
#include <
string
>
10
#include <
type_traits
>
11
#include <
utility
>
12
#include <
vector
>
13
14
namespace
xrpl::rpc
{
15
26
struct
Status
:
public
std::exception
27
{
28
public
:
29
enum class
Type
{
None
,
TER
,
ErrorCodeI
};
30
using
Code
= int;
31
using
Strings
=
std::vector<std::string>
;
32
33
static
constexpr
Code
kOK
= 0;
34
35
Status
() =
default
;
36
37
// The constraint allows only integers (not enums). Prevents enum narrowing.
38
template
<
typename
T>
39
Status
(T code,
Strings
d = {})
40
requires
(
std::is_integral_v<T>
)
41
:
code_
(code),
messages_
(
std
::move(d))
42
{
43
}
44
45
Status
(
TER
ter,
Strings
d = {})
46
:
type_
(
Type
::
TER
),
code_
(
TERtoInt
(ter)),
messages_
(
std
::move(d))
47
{
48
}
49
50
Status
(
ErrorCodeI
e,
Strings
d = {})
51
:
type_
(
Type
::
ErrorCodeI
),
code_
(e),
messages_
(
std
::move(d))
52
{
53
}
54
55
Status
(
ErrorCodeI
e,
std::string
const
& s) :
type_
(
Type
::
ErrorCodeI
),
code_
(e),
messages_
({s})
56
{
57
}
58
64
[[nodiscard]]
std::string
65
codeString
()
const
;
66
70
operator
bool()
const
71
{
72
return
code_
!=
kOK
;
73
}
74
78
bool
79
operator!
()
const
80
{
81
return
!bool(*
this
);
82
}
83
88
[[nodiscard]]
TER
89
toTER
()
const
90
{
91
XRPL_ASSERT(
type_
==
Type::TER
,
"xrpl::rpc::Status::toTER : type is TER"
);
92
return
TER::fromInt
(
code_
);
93
}
94
99
[[nodiscard]]
ErrorCodeI
100
toErrorCode
()
const
101
{
102
XRPL_ASSERT(
103
type_
==
Type::ErrorCodeI
,
"xrpl::rpc::Status::toErrorCode : type is error code"
);
104
return
ErrorCodeI
(
code_
);
105
}
106
110
void
111
inject
(
json::Value
&
object
)
const
112
{
113
if
(
auto
ec =
toErrorCode
())
114
{
115
if
(
messages_
.empty())
116
{
117
injectError
(ec,
object
);
118
}
119
else
120
{
121
injectError
(ec,
message
(),
object
);
122
}
123
}
124
}
125
126
[[nodiscard]]
Strings
const
&
127
messages
()
const
128
{
129
return
messages_
;
130
}
131
135
[[nodiscard]]
std::string
136
message
()
const
;
137
138
[[nodiscard]]
Type
139
type
()
const
140
{
141
return
type_
;
142
}
143
144
[[nodiscard]]
std::string
145
toString
()
const
;
146
152
void
153
fillJson
(
json::Value
&);
154
155
private
:
156
Type
type_
=
Type::None
;
157
Code
code_
=
kOK
;
158
Strings
messages_
;
159
};
160
161
}
// namespace xrpl::rpc
std::string
json::Value
Represents a JSON value.
Definition
json_value.h:117
xrpl::TERSubset< CanCvtToTER >::fromInt
static constexpr TERSubset fromInt(int from)
Definition
TER.h:444
exception
std::is_integral_v
T is_integral_v
std
STL namespace.
xrpl::rpc
API version numbers used in later API versions.
Definition
ApiVersion.h:36
xrpl::rpc::injectError
void injectError(ErrorCodeI code, json::Value &json)
Add or update the json update to reflect the error code.
Definition
ErrorCodes.cpp:164
xrpl::ErrorCodeI
ErrorCodeI
Definition
ErrorCodes.h:23
xrpl::TERtoInt
constexpr TERUnderlyingType TERtoInt(TELcodes v)
Definition
TER.h:386
xrpl::TER
TERSubset< CanCvtToTER > TER
Definition
TER.h:654
string
xrpl::rpc::Status::Status
Status(ErrorCodeI e, std::string const &s)
Definition
Status.h:55
xrpl::rpc::Status::inject
void inject(json::Value &object) const
Apply the Status to a JsonObject.
Definition
Status.h:111
xrpl::rpc::Status::Status
Status(T code, Strings d={})
Definition
Status.h:39
xrpl::rpc::Status::Type
Type
Definition
Status.h:29
xrpl::rpc::Status::Type::TER
@ TER
Definition
Status.h:29
xrpl::rpc::Status::Type::None
@ None
Definition
Status.h:29
xrpl::rpc::Status::Type::ErrorCodeI
@ ErrorCodeI
Definition
Status.h:29
xrpl::rpc::Status::toTER
TER toTER() const
Returns the Status as a TER.
Definition
Status.h:89
xrpl::rpc::Status::messages_
Strings messages_
Definition
Status.h:158
xrpl::rpc::Status::Strings
std::vector< std::string > Strings
Definition
Status.h:31
xrpl::rpc::Status::toErrorCode
ErrorCodeI toErrorCode() const
Returns the Status as an error_code_i.
Definition
Status.h:100
xrpl::rpc::Status::type_
Type type_
Definition
Status.h:156
xrpl::rpc::Status::fillJson
void fillJson(json::Value &)
Fill a json::Value with an RPC 2.0 response.
Definition
Status.cpp:48
xrpl::rpc::Status::toString
std::string toString() const
Definition
Status.cpp:81
xrpl::rpc::Status::Status
Status(ErrorCodeI e, Strings d={})
Definition
Status.h:50
xrpl::rpc::Status::messages
Strings const & messages() const
Definition
Status.h:127
xrpl::rpc::Status::Code
int Code
Definition
Status.h:30
xrpl::rpc::Status::Status
Status(TER ter, Strings d={})
Definition
Status.h:45
xrpl::rpc::Status::kOK
static constexpr Code kOK
Definition
Status.h:33
xrpl::rpc::Status::Status
Status()=default
xrpl::rpc::Status::codeString
std::string codeString() const
If the Status is OK, the result is an empty string.
Definition
Status.cpp:15
xrpl::rpc::Status::code_
Code code_
Definition
Status.h:157
xrpl::rpc::Status::type
Type type() const
Definition
Status.h:139
xrpl::rpc::Status::operator!
bool operator!() const
Returns true if the Status is OK.
Definition
Status.h:79
xrpl::rpc::Status::message
std::string message() const
Return the first message, if any.
Definition
Status.cpp:67
type_traits
utility
vector
Generated by
1.17.0