xrpld
Loading...
Searching...
No Matches
require.h
1#pragma once
2
3#include <test/jtx/requires.h>
4
5#include <functional>
6#include <vector>
7
8namespace xrpl {
9
10namespace detail {
11
12template <class Cond, class... Args>
13inline void
14requireArgs(test::jtx::requires_t& vec, Cond const& cond, Args const&... args)
15{
16 vec.push_back(cond);
17 if constexpr (sizeof...(args) > 0)
18 requireArgs(vec, args...);
19}
20
21} // namespace detail
22
23namespace test::jtx {
24
26template <class... Args>
28required(Args const&... args)
29{
30 requires_t vec;
31 detail::requireArgs(vec, args...);
32 return [vec](Env& env) {
33 for (auto const& f : vec)
34 f(env);
35 };
36}
37
45{
46private:
48
49public:
50 template <class... Args>
51 Require(Args const&... args) : cond_(required(args...))
52 {
53 }
54
55 void
56 operator()(Env&, JTx& jt) const
57 {
59 }
60};
61
62} // namespace test::jtx
63
64} // namespace xrpl
A transaction testing environment.
Definition Env.h:143
void operator()(Env &, JTx &jt) const
Definition require.h:56
Require(Args const &... args)
Definition require.h:51
T emplace_back(T... args)
void requireArgs(test::jtx::requires_t &vec, Cond const &cond, Args const &... args)
Definition require.h:14
require_t required(Args const &... args)
Compose many condition functors into one.
Definition require.h:28
std::vector< require_t > requires_t
Definition requires.h:11
std::function< void(Env &)> require_t
Definition requires.h:10
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
T push_back(T... args)
Execution context for applying a JSON transaction.
Definition JTx.h:23
requires_t require
Definition JTx.h:25