Line data 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 :
49 : //-----------------------------------------------
50 :
51 : } // capy
52 : } // boost
53 :
54 : namespace std {
55 : template<>
56 : struct is_error_code_enum<
57 : ::boost::capy::error>
58 : : std::true_type {};
59 : } // std
60 :
61 : namespace boost {
62 : namespace capy {
63 :
64 : //-----------------------------------------------
65 :
66 : namespace detail {
67 :
68 : struct BOOST_CAPY_SYMBOL_VISIBLE
69 : error_cat_type
70 : : std::error_category
71 : {
72 : BOOST_CAPY_DECL const char* name(
73 : ) const noexcept override;
74 : BOOST_CAPY_DECL std::string message(
75 : int) const override;
76 : constexpr error_cat_type() noexcept = default;
77 : };
78 :
79 : BOOST_CAPY_DECL extern error_cat_type error_cat;
80 :
81 : } // detail
82 :
83 : //-----------------------------------------------
84 :
85 : inline
86 : std::error_code
87 1381 : make_error_code(
88 : error ev) noexcept
89 : {
90 1381 : return std::error_code{
91 : static_cast<std::underlying_type<
92 : error>::type>(ev),
93 1381 : detail::error_cat};
94 : }
95 :
96 : } // capy
97 : } // boost
98 :
99 : #endif
|