6#include "raft/errors.hpp"
8namespace raft::errors::detail
11 constexpr std::string_view getMessage()
13 if constexpr (std::is_same_v<T, Timeout>)
17 if constexpr (std::is_same_v<T, Unimplemented>)
19 return "unimplemented";
21 if constexpr (std::is_same_v<T, NotLeader>)
25 if constexpr (std::is_same_v<T, AlreadyRunning>)
27 return "already running";
29 if constexpr (std::is_same_v<T, NotRunning>)
33 if constexpr (std::is_same_v<T, FailedToStart>)
35 return "failed to start";
37 if constexpr (std::is_same_v<T, Deserialization>)
39 return "deserialization";
41 if constexpr (std::is_same_v<T, UnknownLeader>)
43 return "unknown leader";
45 if constexpr (std::is_same_v<T, NonexistentNetwork>)
47 return "nonexistent network";
49 if constexpr (std::is_same_v<T, NoPersistedState>)
51 return "no persisted state";
53 return "unknown error";
57 concept SimpleError = std::is_same_v<T, Timeout> || std::is_same_v<T, Unimplemented>
58 || std::is_same_v<T, NotLeader> || std::is_same_v<T, AlreadyRunning>
59 || std::is_same_v<T, NotRunning> || std::is_same_v<T, FailedToStart>
60 || std::is_same_v<T, Deserialization> || std::is_same_v<T, UnknownLeader>
61 || std::is_same_v<T, NonexistentNetwork> || std::is_same_v<T, NoPersistedState>;
65struct fmt::formatter<raft::errors::Unknown>
67 constexpr auto parse(format_parse_context& ctx) {
return ctx.begin(); }
69 template<
typename FormatContext>
72 return fmt::format_to(ctx.out(),
"unknown error: {}", err.
message);
77struct fmt::formatter<raft::errors::InvalidArgument>
80 constexpr auto parse(format_parse_context& ctx) {
return ctx.begin(); }
83 template<
typename FormatContext>
86 return fmt::format_to(ctx.out(),
"invalid argument: {}", err.
message);
91struct fmt::formatter<raft::errors::PersistenceFailed>
94 constexpr auto parse(format_parse_context& ctx) {
return ctx.begin(); }
97 template<
typename FormatContext>
100 return fmt::format_to(ctx.out(),
"persistence failed: {}", err.
message);
104template<raft::errors::detail::SimpleError T>
105struct fmt::formatter<T>
107 constexpr auto parse(format_parse_context& ctx) {
return ctx.begin(); }
109 template<
typename FormatContext>
110 auto format(T
const& err, FormatContext& ctx)
const
113 return fmt::format_to(ctx.out(),
"{}", raft::errors::detail::getMessage<T>());
An invalid argument error.
Definition errors.hpp:29
std::string message
The error message.
Definition errors.hpp:30
Persistence operation failed.
Definition errors.hpp:75
std::string message
The error message.
Definition errors.hpp:76
An unknown error.
Definition errors.hpp:13
std::string message
The error message.
Definition errors.hpp:14