include/boost/capy/error.hpp

100.0% Lines (3/3) 100.0% List of functions (1/1) -% Branches (0/0)
f(x) Functions (1)
Line TLA Hits Source Code
1 //
2 // Copyright (c) 2025 Vinnie Falco (vinnie.falco@gmail.com)
3 //
4 // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 //
7 // Official repository: https://github.com/cppalliance/capy
8 //
9
10 #ifndef BOOST_CAPY_ERROR_HPP
11 #define BOOST_CAPY_ERROR_HPP
12
13 #include <boost/capy/detail/config.hpp>
14 #include <system_error>
15
16 namespace boost {
17 namespace capy {
18
19 /** Error codes for capy I/O operations.
20
21 These codes are produced by capy algorithms and I/O operations.
22
23 @warning Callers must never compare received `error_code` values
24 directly against this enum. Always compare against the portable
25 @ref cond error conditions instead. These enum values are
26 implementation details subject to change.
27
28 @see cond
29 */
30 enum class error
31 {
32 /// End-of-stream reached. Compare with `cond::eof`.
33 eof = 1,
34
35 /// Operation was cancelled. Compare with `cond::canceled`.
36 canceled,
37
38 /// Internal test assertion failed.
39 test_failure,
40
41 /// Peer closed connection without proper TLS shutdown.
42 /// Compare with `cond::stream_truncated`.
43 stream_truncated,
44
45 /// Requested item was not found. Compare with `cond::not_found`.
46 not_found,
47
48 /// Operation timed out. Compare with `cond::timeout`.
49 timeout
50 };
51
52 } // capy
53 } // boost
54
55 namespace std {
56 template<>
57 struct is_error_code_enum<
58 ::boost::capy::error>
59 : std::true_type {};
60 } // std
61
62 namespace boost {
63 namespace capy {
64
65 namespace detail {
66
67 struct BOOST_CAPY_SYMBOL_VISIBLE
68 error_cat_type
69 : std::error_category
70 {
71 BOOST_CAPY_DECL const char* name(
72 ) const noexcept override;
73 BOOST_CAPY_DECL std::string message(
74 int) const override;
75 constexpr error_cat_type() noexcept = default;
76 };
77
78 BOOST_CAPY_DECL extern error_cat_type error_cat;
79
80 } // detail
81
82 /// Create an error_code from an error value.
83 inline
84 std::error_code
85 2208x make_error_code(
86 error ev) noexcept
87 {
88 2208x return std::error_code{
89 static_cast<std::underlying_type<
90 error>::type>(ev),
91 2208x detail::error_cat};
92 }
93
94 } // capy
95 } // boost
96
97 #endif
98