32#include <system_error>
120using result = std::expected<T, std::error_code>;
131template<
typename T,
typename...
Args>
133 { T::make(std::declval<Args>()...) } -> std::same_as<result<T>>;
155template<
typename T,
typename...
Args>
158 auto r = T::make(std::forward<Args>(
args)...);
162 return std::make_unique<T>(std::move(*
r));
186 requires std::is_error_code_enum_v<E>
188 return std::unexpected<std::error_code>(
e);
212 requires std::is_error_condition_enum_v<E>
220constexpr esp_err_t esp_err_no_mem = 0x101;
230#ifdef CONFIG_COMPILER_CXX_EXCEPTIONS
231 throw std::bad_alloc();
274 return std::unexpected<std::error_code>(
ec);
293#ifdef CONFIG_COMPILER_CXX_EXCEPTIONS
308 return std::move(
result).transform_error([](
auto ec) -> std::error_code {
throw std::system_error(
ec); }).value();
314 result.transform_error([](
auto ec) -> std::error_code {
throw std::system_error(
ec); });
334template<
typename T,
typename Callback>
335 requires std::invocable<Callback, std::error_code> &&
336 std::same_as<std::invoke_result_t<Callback, std::error_code>,
void>
338 result.transform_error([&](
auto ec) {
340 if constexpr (
requires {
static_cast<bool>(
on_error); }) {
360 result.transform_error([](
auto ec) {
371struct 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.
Concept for types that provide a static make() factory method returning result<T>.
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.
result< std::unique_ptr< T > > make_unique(Args &&... args)
Constructs a T via its make() factory and wraps it in a std::unique_ptr.
@ 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.