libs/capy/include/boost/capy/error.hpp

100.0% Lines (3/3) 100.0% Functions (1/1) -% Branches (0/0)
libs/capy/include/boost/capy/error.hpp
Line 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 returned from algorithms and operations.
20
21 Return `error::eof` when originating an eof error.
22 Check `ec == cond::eof` for portable comparison.
23
24 Return `error::canceled` when originating a cancellation error.
25 Check `ec == cond::canceled` for portable comparison.
26
27 Return `error::stream_truncated` when peer closes without TLS shutdown.
28 Check `ec == cond::stream_truncated` for portable comparison.
29 */
30 enum class error
31 {
32 eof = 1,
33 canceled,
34 test_failure,
35 stream_truncated,
36 not_found
37 };
38
39 //-----------------------------------------------
40
41 } // capy
42 } // boost
43
44 namespace std {
45 template<>
46 struct is_error_code_enum<
47 ::boost::capy::error>
48 : std::true_type {};
49 } // std
50
51 namespace boost {
52 namespace capy {
53
54 //-----------------------------------------------
55
56 namespace detail {
57
58 struct BOOST_CAPY_SYMBOL_VISIBLE
59 error_cat_type
60 : std::error_category
61 {
62 BOOST_CAPY_DECL const char* name(
63 ) const noexcept override;
64 BOOST_CAPY_DECL std::string message(
65 int) const override;
66 constexpr error_cat_type() noexcept = default;
67 };
68
69 BOOST_CAPY_DECL extern error_cat_type error_cat;
70
71 } // detail
72
73 //-----------------------------------------------
74
75 inline
76 std::error_code
77 1381 make_error_code(
78 error ev) noexcept
79 {
80 1381 return std::error_code{
81 static_cast<std::underlying_type<
82 error>::type>(ev),
83 1381 detail::error_cat};
84 }
85
86 } // capy
87 } // boost
88
89 #endif
90