LCOV - code coverage report
Current view: top level - capy - cond.hpp (source / functions) Coverage Total Hit
Test: coverage_remapped.info Lines: 100.0 % 3 3
Test Date: 2026-08-14 20:51:18 Functions: 100.0 % 1 1

           TLA  Line data    Source code
       1                 : //
       2                 : // Copyright (c) 2025 Vinnie Falco (vinnie.falco@gmail.com)
       3                 : // Copyright (c) 2026 Michael Vandeberg
       4                 : //
       5                 : // Distributed under the Boost Software License, Version 1.0. (See accompanying
       6                 : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       7                 : //
       8                 : // Official repository: https://github.com/cppalliance/capy
       9                 : //
      10                 : 
      11                 : #ifndef BOOST_CAPY_COND_HPP
      12                 : #define BOOST_CAPY_COND_HPP
      13                 : 
      14                 : #include <boost/capy/detail/config.hpp>
      15                 : #include <system_error>
      16                 : 
      17                 : namespace boost {
      18                 : namespace capy {
      19                 : 
      20                 : /** Portable error conditions for capy I/O operations.
      21                 : 
      22                 :     These are the conditions callers should compare against when
      23                 :     handling errors from capy operations. The @ref error enum values
      24                 :     map to these conditions, as do platform-specific error codes
      25                 :     (e.g., `ECANCELED`, SSL EOF errors).
      26                 : 
      27                 :     @par Example
      28                 : 
      29                 :     @code
      30                 :     auto [ec, n] = co_await stream.read_some( bufs );
      31                 :     if( ec == cond::canceled )
      32                 :     {
      33                 :         // handle cancellation
      34                 :     }
      35                 :     else if( ec == cond::eof )
      36                 :     {
      37                 :         // handle end of stream
      38                 :     }
      39                 :     else if( ec )
      40                 :     {
      41                 :         // handle other errors
      42                 :     }
      43                 :     @endcode
      44                 : 
      45                 :     @see error
      46                 : */
      47                 : enum class cond
      48                 : {
      49                 :     /** End-of-stream condition.
      50                 : 
      51                 :         An `error_code` compares equal to `eof` when the stream
      52                 :         reached its natural end. Examples are a peer sending TCP
      53                 :         FIN, or a file reaching EOF.
      54                 :     */
      55                 :     eof = 1,
      56                 : 
      57                 :     /** Operation cancelled condition.
      58                 : 
      59                 :         An `error_code` compares equal to `canceled` when the
      60                 :         operation's stop token was activated, the I/O object's
      61                 :         `cancel()` was called, or a platform cancellation error
      62                 :         occurred.
      63                 :     */
      64                 :     canceled = 2,
      65                 : 
      66                 :     /** Stream truncated condition.
      67                 : 
      68                 :         An `error_code` compares equal to `stream_truncated` when
      69                 :         a TLS peer closed the connection without sending a proper
      70                 :         shutdown alert.
      71                 :     */
      72                 :     stream_truncated = 3,
      73                 : 
      74                 :     /** Operation timed out condition.
      75                 : 
      76                 :         An `error_code` compares equal to `timeout` when an
      77                 :         operation exceeded its allowed duration.
      78                 :     */
      79                 :     timeout = 4
      80                 : };
      81                 : 
      82                 : } // capy
      83                 : } // boost
      84                 : 
      85                 : namespace std {
      86                 : template<>
      87                 : struct is_error_condition_enum<
      88                 :     ::boost::capy::cond>
      89                 :     : std::true_type {};
      90                 : } // std
      91                 : 
      92                 : namespace boost {
      93                 : namespace capy {
      94                 : 
      95                 : namespace detail {
      96                 : 
      97                 : struct BOOST_CAPY_SYMBOL_VISIBLE
      98                 :     cond_cat_type
      99                 :     : std::error_category
     100                 : {
     101                 :     BOOST_CAPY_DECL const char* name(
     102                 :         ) const noexcept override;
     103                 :     BOOST_CAPY_DECL std::string message(
     104                 :         int) const override;
     105                 :     BOOST_CAPY_DECL bool equivalent(
     106                 :         std::error_code const& ec,
     107                 :         int condition) const noexcept override;
     108                 :     constexpr cond_cat_type() noexcept = default;
     109                 : };
     110                 : 
     111                 : BOOST_CAPY_DECL extern cond_cat_type cond_cat;
     112                 : 
     113                 : } // detail
     114                 : 
     115                 : /** Create an error_condition from a cond value.
     116                 : 
     117                 :     @param ev The library condition value.
     118                 : 
     119                 :     @return An `std::error_condition` holding `ev` in the library's
     120                 :         condition category.
     121                 : */
     122                 : inline
     123                 : std::error_condition
     124 HIT         227 : make_error_condition(
     125                 :     cond ev) noexcept
     126                 : {
     127             227 :     return std::error_condition{
     128                 :         static_cast<std::underlying_type<
     129                 :             cond>::type>(ev),
     130             227 :         detail::cond_cat};
     131                 : }
     132                 : 
     133                 : } // capy
     134                 : } // boost
     135                 : 
     136                 : #endif
        

Generated by: LCOV version 2.3