43#include <system_error>
66 NotRegistered = OVE_ERR_NOT_REGISTERED,
67 InvalidParam = OVE_ERR_INVALID_PARAM,
68 NoMemory = OVE_ERR_NO_MEMORY,
69 Timeout = OVE_ERR_TIMEOUT,
70 NotSupported = OVE_ERR_NOT_SUPPORTED,
71 QueueFull = OVE_ERR_QUEUE_FULL,
72 MlFailed = OVE_ERR_ML_FAILED,
73 NetRefused = OVE_ERR_NET_REFUSED,
74 NetUnreachable = OVE_ERR_NET_UNREACHABLE,
75 NetAddrInUse = OVE_ERR_NET_ADDR_IN_USE,
76 NetReset = OVE_ERR_NET_RESET,
77 NetDnsFail = OVE_ERR_NET_DNS_FAIL,
78 NetClosed = OVE_ERR_NET_CLOSED,
79 BusNack = OVE_ERR_BUS_NACK,
80 BusBusy = OVE_ERR_BUS_BUSY,
81 BusError = OVE_ERR_BUS_ERROR,
82 QueueEmpty = OVE_ERR_QUEUE_EMPTY,
83 WouldBlock = OVE_ERR_WOULD_BLOCK,
85 Inval = OVE_ERR_INVAL,
86 NotFound = OVE_ERR_NOT_FOUND,
96static_assert(
static_cast<int>(Error::Ok) == OVE_OK,
"Error::Ok drifted");
97static_assert(
static_cast<int>(Error::NotRegistered) == OVE_ERR_NOT_REGISTERED,
98 "Error::NotRegistered drifted");
99static_assert(
static_cast<int>(Error::InvalidParam) == OVE_ERR_INVALID_PARAM,
100 "Error::InvalidParam drifted");
101static_assert(
static_cast<int>(Error::NoMemory) == OVE_ERR_NO_MEMORY,
"Error::NoMemory drifted");
102static_assert(
static_cast<int>(Error::Timeout) == OVE_ERR_TIMEOUT,
"Error::Timeout drifted");
103static_assert(
static_cast<int>(Error::NotSupported) == OVE_ERR_NOT_SUPPORTED,
104 "Error::NotSupported drifted");
105static_assert(
static_cast<int>(Error::QueueFull) == OVE_ERR_QUEUE_FULL,
"Error::QueueFull drifted");
106static_assert(
static_cast<int>(Error::MlFailed) == OVE_ERR_ML_FAILED,
"Error::MlFailed drifted");
107static_assert(
static_cast<int>(Error::NetRefused) == OVE_ERR_NET_REFUSED,
108 "Error::NetRefused drifted");
109static_assert(
static_cast<int>(Error::NetUnreachable) == OVE_ERR_NET_UNREACHABLE,
110 "Error::NetUnreachable drifted");
111static_assert(
static_cast<int>(Error::NetAddrInUse) == OVE_ERR_NET_ADDR_IN_USE,
112 "Error::NetAddrInUse drifted");
113static_assert(
static_cast<int>(Error::NetReset) == OVE_ERR_NET_RESET,
"Error::NetReset drifted");
114static_assert(
static_cast<int>(Error::NetDnsFail) == OVE_ERR_NET_DNS_FAIL,
115 "Error::NetDnsFail drifted");
116static_assert(
static_cast<int>(Error::NetClosed) == OVE_ERR_NET_CLOSED,
"Error::NetClosed drifted");
117static_assert(
static_cast<int>(Error::BusNack) == OVE_ERR_BUS_NACK,
"Error::BusNack drifted");
118static_assert(
static_cast<int>(Error::BusBusy) == OVE_ERR_BUS_BUSY,
"Error::BusBusy drifted");
119static_assert(
static_cast<int>(Error::BusError) == OVE_ERR_BUS_ERROR,
"Error::BusError drifted");
120static_assert(
static_cast<int>(Error::QueueEmpty) == OVE_ERR_QUEUE_EMPTY,
121 "Error::QueueEmpty drifted");
122static_assert(
static_cast<int>(Error::WouldBlock) == OVE_ERR_WOULD_BLOCK,
123 "Error::WouldBlock drifted");
124static_assert(
static_cast<int>(Error::Eof) == OVE_ERR_EOF,
"Error::Eof drifted");
125static_assert(
static_cast<int>(Error::Inval) == OVE_ERR_INVAL,
"Error::Inval drifted");
126static_assert(
static_cast<int>(Error::NotFound) == OVE_ERR_NOT_FOUND,
"Error::NotFound drifted");
139template <
class T =
void>
using Result = std::expected<T, Error>;
155 const char *name()
const noexcept override
160 std::string message(
int ev)
const override
162 switch (
static_cast<Error>(ev)) {
165 case Error::NotRegistered:
166 return "backend or feature not registered";
167 case Error::InvalidParam:
168 return "invalid parameter";
169 case Error::NoMemory:
170 return "out of memory";
172 return "operation timed out";
173 case Error::NotSupported:
174 return "operation not supported";
175 case Error::QueueFull:
177 case Error::MlFailed:
178 return "ML inference failed";
179 case Error::NetRefused:
180 return "connection refused";
181 case Error::NetUnreachable:
182 return "network unreachable";
183 case Error::NetAddrInUse:
184 return "address in use";
185 case Error::NetReset:
186 return "connection reset by peer";
187 case Error::NetDnsFail:
188 return "DNS resolution failed";
189 case Error::NetClosed:
190 return "connection closed";
195 case Error::BusError:
196 return "bus framing/parity error";
197 case Error::QueueEmpty:
198 return "queue empty";
199 case Error::WouldBlock:
200 return "operation would block";
202 return "end of file";
204 return "argument or state invalid";
205 case Error::NotFound:
206 return "resource not found";
208 return "unknown ove error";
258 return std::unexpected{
static_cast<Error>(rc)};
279 using V = std::decay_t<T>;
281 return Result<V>{std::forward<T>(value)};
282 return std::unexpected{
static_cast<Error>(rc)};
294template <>
struct is_error_code_enum<
ove::Error> : true_type {
std::error_category implementation for Error values.
Definition error.hpp:153
Top-level namespace for all oveRTOS C++ abstractions.
Definition app.hpp:20
const std::error_category & error_category() noexcept
Returns the singleton std::error_category for Error.
Definition error.hpp:222
std::error_code make_error_code(Error e) noexcept
ADL-discoverable factory for std::error_code from Error.
Definition error.hpp:238
Result< void > from_rc(int rc) noexcept
Lifts a substrate rc-code into a Result<void>.
Definition error.hpp:254
Error
Strong-typed mirror of substrate OVE_ERR_* codes.
Definition error.hpp:64
std::expected< T, Error > Result
std::expected-based result alias.
Definition error.hpp:139