Clio  develop
The XRP Ledger API server.
Loading...
Searching...
No Matches
Concepts.hpp
1#pragma once
2
3#include "data/cassandra/Types.hpp"
4
5#include <boost/asio/io_context.hpp>
6#include <boost/asio/spawn.hpp>
7#include <boost/json.hpp>
8#include <boost/json/object.hpp>
9
10#include <chrono>
11#include <concepts>
12#include <cstdint>
13#include <optional>
14#include <string>
15#include <utility>
16#include <vector>
17
18namespace data::cassandra {
19
23template <typename T>
24concept SomeSettingsProvider = requires(T a) {
25 { a.getSettings() } -> std::same_as<Settings>;
26 { a.getKeyspace() } -> std::same_as<std::string>;
27 { a.getTablePrefix() } -> std::same_as<std::optional<std::string>>;
28 { a.getReplicationFactor() } -> std::same_as<uint16_t>;
29};
30
34template <typename T>
35concept SomeExecutionStrategy = requires(
36 T a,
37 Settings settings,
38 Handle handle,
39 Statement statement,
40 std::vector<Statement> statements,
41 PreparedStatement prepared,
42 boost::asio::yield_context token
43) {
44 { T(settings, handle) };
45 { a.sync() } -> std::same_as<void>;
46 { a.isTooBusy() } -> std::same_as<bool>;
47 { a.writeSync(statement) } -> std::same_as<ResultOrError>;
48 { a.writeSync(prepared) } -> std::same_as<ResultOrError>;
49 { a.write(prepared) } -> std::same_as<void>;
50 { a.write(std::move(statements)) } -> std::same_as<void>;
51 { a.read(token, prepared) } -> std::same_as<ResultOrError>;
52 { a.read(token, statement) } -> std::same_as<ResultOrError>;
53 { a.read(token, statements) } -> std::same_as<ResultOrError>;
54 { a.readEach(token, statements) } -> std::same_as<std::vector<Result>>;
55 { a.stats() } -> std::same_as<boost::json::object>;
56};
57
61template <typename T>
63 requires(T a, boost::asio::io_context ioc, CassandraError err, uint32_t attempt) {
64 { T(ioc) };
65 { a.shouldRetry(err) } -> std::same_as<bool>;
66 {
67 a.retry([]() {})
68 } -> std::same_as<void>;
69 };
70
71} // namespace data::cassandra
A simple container for both error message and error code.
Definition Error.hpp:15
Represents a handle to the cassandra database cluster.
Definition Handle.hpp:27
The requirements of an execution strategy.
Definition Concepts.hpp:35
The requirements of a retry policy.
Definition Concepts.hpp:62
The requirements of a settings provider.
Definition Concepts.hpp:24
This namespace implements a wrapper for the Cassandra C++ driver.
Definition CassandraBackendFamily.hpp:47