29#include <system_error>
77 [[nodiscard]]
const char*
name() const noexcept override final;
86 [[nodiscard]] std::
string message(
int ec) const override final;
118using result = std::expected<T, std::error_code>;
141 requires std::is_error_code_enum_v<E>
142[[nodiscard]]
constexpr std::unexpected<std::error_code>
error(E e)
noexcept {
143 return std::unexpected<std::error_code>(e);
167 requires std::is_error_condition_enum_v<E>
168[[nodiscard]]
constexpr std::unexpected<std::error_code>
error(E e)
noexcept {
182[[nodiscard]]
inline std::unexpected<std::error_code>
error(
esp_err_t e)
noexcept {
205[[nodiscard]]
inline std::unexpected<std::error_code>
error(std::error_code ec)
noexcept {
206 return std::unexpected<std::error_code>(ec);
223#ifdef CONFIG_COMPILER_CXX_EXCEPTIONS
238 return std::move(
result).transform_error([](
auto ec) -> std::error_code {
throw std::system_error(ec); }).value();
244 result.transform_error([](
auto ec) -> std::error_code {
throw std::system_error(ec); });
264template<
typename T,
typename Callback>
265 requires std::invocable<Callback, std::error_code> &&
266 std::same_as<std::invoke_result_t<Callback, std::error_code>,
void>
268 result.transform_error([&](
auto ec) {
270 if constexpr (
requires {
static_cast<bool>(on_error); }) {
276 std::forward<Callback>(on_error)(ec);
290 result.transform_error([](
auto ec) {
301struct is_error_code_enum<
idfxx::
errc> : true_type {};
// end of idfxx_core_error
Error category for IDFXX and ESP-IDF error codes.
std::string message(int ec) const override final
Returns a human-readable message for the given error code.
const char * name() const noexcept override final
Returns the name of the error category.
std::error_code make_error_code(errc e) noexcept
Creates a std::error_code from an idfxx::errc value.
void abort_on_error(result< T > result, Callback &&on_error)
Aborts the program if the result contains an error.
constexpr std::unexpected< std::error_code > error(E e) noexcept
Creates an unexpected error from an error code enum.
T unwrap(result< T > result)
Throws a std::system_error if the result is an error.
@ invalid_size
Invalid size.
@ invalid_version
Version was invalid.
@ invalid_state
Invalid state.
@ not_allowed
Operation is not allowed.
@ invalid_mac
MAC address was invalid.
@ not_found
Requested resource not found.
@ timeout
Operation timed out.
@ not_supported
Operation or feature not supported.
@ invalid_crc
CRC or checksum was invalid.
@ invalid_arg
Invalid argument.
@ not_finished
Operation has not fully completed.
@ invalid_response
Received response was invalid.
std::expected< T, std::error_code > result
result type wrapping a value or error code.
result< void > wrap(esp_err_t e)
Wraps an esp_err_t into a result<void>.
const error_category & default_category() noexcept
Returns a reference to the IDFXX error category singleton.