Loading...
Searching...
No Matches
caf::error Class Reference

A serializable type for storing error codes with category and optional, human-readable context information. More...

`#include <error.hpp>`

Inheritance diagram for caf::error:

## Public Types

using | inspect_fun

## Public Member Functions

| error (none_t) noexcept
| error (error &&) noexcept
error & | operator= (error &&) noexcept
| error (const error &)
error & | operator= (const error &)
| error (uint8_t x, atom_value y)
| error (uint8_t x, atom_value y, message z)
template<class E, class = enable_if_has_make_error_t<E>>
| error (E error_value)
template<class E>
enable_if_has_make_error_t< E, error & > | operator= (E error_value)
template<class E, class = enable_if_has_error_factory_t<E>, class... Ts>
| error (E error_value, Ts &&... xs)
template<class E>
enable_if_has_error_factory_t< E, error & > | operator= (E error_value)
uint8_t | code () const noexcept
| Returns the category-specific error code, whereas 0 means "no error".
atom_value | category () const noexcept
| Returns the category of this error.
const message & | context () const noexcept
| Returns context information to this error.
| operator bool () const noexcept
| Returns *this != none.
bool | operator! () const noexcept
| Returns *this == none.
int | compare (const error &) const noexcept
int | compare (uint8_t x, atom_value y) const noexcept
message & | context () noexcept
| Returns context information to this error.
void | clear () noexcept
| Sets the error code to 0.

## Friends

template<class Inspector>
Inspector::result_type | inspect (Inspector &f, error &x)

## Related Symbols

(Note that these are not member symbols.)
std::string | to_string (const error &x)
bool | operator== (const error &x, none_t)
bool | operator== (none_t, const error &x)
template<class E, class = enable_if_has_make_error_t<E>>
bool | operator== (const error &x, E y)
template<class E, class = enable_if_has_make_error_t<E>>
bool | operator== (E x, const error &y)
bool | operator!= (const error &x, none_t)
bool | operator!= (none_t, const error &x)
template<class E, class = enable_if_has_make_error_t<E>>
bool | operator!= (const error &x, E y)
template<class E, class = enable_if_has_make_error_t<E>>
bool | operator!= (E x, const error &y)
template<class Code, class... Ts>
enable_if_has_error_factory_t< Code, error > | make_error (Code code, Ts &&... xs)

## Detailed Description

A serializable type for storing error codes with category and optional, human-readable context information.

Unlike error handling classes from the C++ standard library, this type is serializable. It consists of an 8-bit code, a 64-bit atom constant, plus optionally a ::message to store additional information.

# Why not std::error_code or std::error_condition?

First, the standard does not define the values for std::errc. This means serializing error conditions (which are meant to be portable) is not safe in a distributed setting unless all machines are running the same operating system and version of the C++ standard library.

Second, the standard library primitives, unlike exceptions, do not offer an API for attaching additional context to an error. The error handling API offered by the standard is meant to wrap C system calls in a (source code) portable way. In a distributed setting, an error may not occur locally. In this case, an error code and category alone is often not satisfactory information when signalling errors back to end users. The additional context also enables composition of errors by modifying the message details as needed.

# Why is there no string() member function?

The C++ standard library uses category singletons and virtual dispatching to correlate error codes to descriptive strings. However, singletons are a poor choice when it comes to serialization. CAF uses atoms for categories instead and requires users to register custom error categories to the actor system. This makes the actor system the natural instance for rendering error messages via actor_system::render(const error&).

## Member Typedef Documentation

## inspect_fun

using caf::error::inspect_fun

Initial value:
std::function<error(meta::type_name_t, uint8_t&, atom_value&,
meta::omittable_if_empty_t, message&)>
caf::message
Describes a fixed-length, copy-on-write, type-erased tuple with elements of any type.
Definition message.hpp:47
caf::atom_value
atom_value
The value type of atoms.
Definition atom.hpp:32

## Member Function Documentation

## category()

atom_value caf::error::category | ( |  | ) | const

noexcept

Returns the category of this error.

Precondition
  *this != none

## code()

uint8_t caf::error::code | ( |  | ) | const

noexcept

Returns the category-specific error code, whereas 0 means "no error".

Precondition
  *this != none

## context() [1/2]

const message & caf::error::context | ( |  | ) | const

noexcept

Returns context information to this error.

Precondition
  *this != none

## context() [2/2]

message & caf::error::context | ( |  | ) |

noexcept

Returns context information to this error.

Precondition
  *this != none

The documentation for this class was generated from the following file:

- /build/actor-framework-Z9pIPl/actor-framework-0.17.6/libcaf_core/caf/error.hpp