6#include "raft/enhanced/server.hpp"
8namespace raft::enhanced::typed
14 std::vector<std::byte> serialize(
const T& obj);
19 template<
typename T,
typename E>
20 tl::expected<T, E> deserialize(
const std::vector<std::byte>& bytes);
23 template<
typename T,
typename E>
24 concept Serializable =
requires(T obj,
const std::vector<std::byte>& bytes) {
25 { serialize(obj) } -> std::same_as<std::vector<std::byte>>;
26 { deserialize<T>(bytes) } -> std::same_as<tl::expected<T, E>>;
30 template<
typename T,
typename E>
40 template<
typename T,
typename E>
42 using LocalCommitCallback =
49 template<
typename T,
typename E>
50 using GlobalCommitCallback =
51 std::function<void(tl::expected<T, E> data,
bool local,
bool duplicate)>;
63 template<
typename T,
typename E>
71 : server_(std::move(config))
92 auto serialized = serialize(value);
97 std::move(callback)](tl::expected<enhanced::LocalCommitInfo, Error> result)
99 if (result.has_value())
101 auto deserialized = deserialize<T>(result->data);
102 if (deserialized.has_value())
104 LocalCommitInfo<T, E> typedInfo {.data = std::move(*deserialized),
105 .duplicate = result->duplicate};
106 callback(std::move(typedInfo));
110 callback(tl::make_unexpected(deserialized.error()));
115 callback(tl::make_unexpected(result.error()));
124 std::function<
void(tl::expected<void, Error>)> callback)
126 server_.endSession(clientID, std::move(callback));
138 server_.setCommitCallback(
139 [callback = std::move(callback)](
140 std::vector<std::byte> data,
bool local,
bool duplicate)
142 auto deserialized = deserialize<T>(data);
143 callback(std::move(deserialized), local, duplicate);
void commit(RequestInfo const &info, const std::vector< std::byte > &value, LocalCommitCallback callback)
Definition typed_server.hpp:66
void setCommitCallback(GlobalCommitCallback< T, E > callback)
Definition typed_server.hpp:136
void endSession(std::string const &clientID, std::function< void(tl::expected< void, Error >)> callback)
Definition typed_server.hpp:123
void commit(RequestInfo const &info, const T &value, LocalCommitCallback< T, E > callback)
Definition typed_server.hpp:90
void clearCommitCallback()
Clears the global commit callback.
Definition typed_server.hpp:148
Server(ServerCreateConfig config)
Definition typed_server.hpp:70
Concept requiring that a type T can be serialized and deserialized with error type E.
Definition typed_server.hpp:24
Configuration for creating an enhanced Raft server.
Definition server.hpp:46
Information about a committed entry with typed data.
Definition typed_server.hpp:33
bool duplicate
Whether the entry was a duplicate.
Definition typed_server.hpp:35
T data
The committed typed data.
Definition typed_server.hpp:34