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