xrpld
Loading...
Searching...
No Matches
flags.h
1#pragma once
2
3#include <test/jtx/Account.h>
4#include <test/jtx/Env.h>
5
6#include <xrpl/basics/contract.h>
7#include <xrpl/json/json_value.h>
8#include <xrpl/protocol/LedgerFormats.h>
9#include <xrpl/protocol/TxFlags.h>
10
11#include <cstdint>
12#include <stdexcept>
13#include <utility>
14
15namespace xrpl {
16namespace detail {
17
19{
20protected:
22
23private:
24 void
26 {
27 switch (flag)
28 {
29 case asfRequireDest:
30 mask_ |= lsfRequireDestTag;
31 break;
32 case asfRequireAuth:
33 mask_ |= lsfRequireAuth;
34 break;
35 case asfDisallowXRP:
36 mask_ |= lsfDisallowXRP;
37 break;
38 case asfDisableMaster:
39 mask_ |= lsfDisableMaster;
40 break;
41 // case asfAccountTxnID: // ???
42 case asfNoFreeze:
43 mask_ |= lsfNoFreeze;
44 break;
45 case asfGlobalFreeze:
46 mask_ |= lsfGlobalFreeze;
47 break;
48 case asfDefaultRipple:
49 mask_ |= lsfDefaultRipple;
50 break;
51 case asfDepositAuth:
52 mask_ |= lsfDepositAuth;
53 break;
54 case asfAllowTrustLineClawback:
55 mask_ |= lsfAllowTrustLineClawback;
56 break;
57 case asfDisallowIncomingCheck:
58 mask_ |= lsfDisallowIncomingCheck;
59 break;
60 case asfDisallowIncomingNFTokenOffer:
61 mask_ |= lsfDisallowIncomingNFTokenOffer;
62 break;
63 case asfDisallowIncomingPayChan:
64 mask_ |= lsfDisallowIncomingPayChan;
65 break;
66 case asfDisallowIncomingTrustline:
67 mask_ |= lsfDisallowIncomingTrustline;
68 break;
69 case asfAllowTrustLineLocking:
70 mask_ |= lsfAllowTrustLineLocking;
71 break;
72 default:
73 Throw<std::runtime_error>("unknown flag");
74 }
75 }
76
77 template <class Flag, class... Args>
78 void
79 setArgs(std::uint32_t flag, Args... args)
80 {
81 setArgs(flag);
82 if constexpr (sizeof...(args))
83 setArgs(args...);
84 }
85
86protected:
87 template <class... Args>
88 FlagsHelper(Args... args)
89 {
90 setArgs(args...);
91 }
92};
93
94} // namespace detail
95
96namespace test::jtx {
97
98// JSON generators
99
104fset(Account const& account, std::uint32_t on, std::uint32_t off = 0);
105
109inline json::Value
110fclear(Account const& account, std::uint32_t off)
111{
112 return fset(account, 0, off);
113}
114
119{
120private:
122
123public:
124 template <class... Args>
125 Flags(Account account, Args... args) : FlagsHelper(args...), account_(std::move(account))
126 {
127 }
128
129 void
130 operator()(Env& env) const;
131};
132
137{
138private:
140
141public:
142 template <class... Args>
143 Nflags(Account account, Args... args) : FlagsHelper(args...), account_(std::move(account))
144 {
145 }
146
147 void
148 operator()(Env& env) const;
149};
150
151} // namespace test::jtx
152
153} // namespace xrpl
Represents a JSON value.
Definition json_value.h:117
void setArgs(std::uint32_t flag, Args... args)
Definition flags.h:79
FlagsHelper(Args... args)
Definition flags.h:88
std::uint32_t mask_
Definition flags.h:21
void setArgs(std::uint32_t flag)
Definition flags.h:25
Immutable cryptographic account descriptor.
Definition jtx/Account.h:21
A transaction testing environment.
Definition Env.h:161
Flags(Account account, Args... args)
Definition flags.h:125
void operator()(Env &env) const
Definition flags.cpp:28
Nflags(Account account, Args... args)
Definition flags.h:143
void operator()(Env &env) const
Definition flags.cpp:46
STL namespace.
json::Value fclear(Account const &account, std::uint32_t off)
Remove account flag.
Definition flags.h:110
json::Value fset(Account const &account, std::uint32_t on, std::uint32_t off=0)
Add and/or remove flag.
Definition flags.cpp:15
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
XRPL_NO_SANITIZE_ADDRESS void Throw(Args &&... args)
Definition contract.h:52