LCOV - code coverage report
Current view: top level - capy - cond.hpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 100.0 % 3 3
Test Date: 2026-02-02 05:00:52 Functions: 100.0 % 1 1

            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_COND_HPP
      11              : #define BOOST_CAPY_COND_HPP
      12              : 
      13              : #include <boost/capy/detail/config.hpp>
      14              : #include <system_error>
      15              : 
      16              : namespace boost {
      17              : namespace capy {
      18              : 
      19              : /** Portable error conditions for capy I/O operations.
      20              : 
      21              :     These are the conditions callers should compare against when
      22              :     handling errors from capy operations. The @ref error enum values
      23              :     map to these conditions, as do platform-specific error codes
      24              :     (e.g., `ECANCELED`, SSL EOF errors).
      25              : 
      26              :     @par Example
      27              : 
      28              :     @code
      29              :     auto [ec, n] = co_await stream.read_some( bufs );
      30              :     if( ec == cond::canceled )
      31              :         // handle cancellation
      32              :     else if( ec == cond::eof )
      33              :         // handle end of stream
      34              :     else if( ec.failed() )
      35              :         // handle other errors
      36              :     @endcode
      37              : 
      38              :     @see error
      39              : */
      40              : enum class cond
      41              : {
      42              :     /** End-of-stream condition.
      43              : 
      44              :         An `error_code` compares equal to `eof` when the stream
      45              :         reached its natural end, such as when a peer sends TCP FIN
      46              :         or a file reaches EOF.
      47              :     */
      48              :     eof = 1,
      49              : 
      50              :     /** Operation cancelled condition.
      51              : 
      52              :         An `error_code` compares equal to `canceled` when the
      53              :         operation's stop token was activated, the I/O object's
      54              :         `cancel()` was called, or a platform cancellation error
      55              :         occurred.
      56              :     */
      57              :     canceled = 2,
      58              : 
      59              :     /** Stream truncated condition.
      60              : 
      61              :         An `error_code` compares equal to `stream_truncated` when
      62              :         a TLS peer closed the connection without sending a proper
      63              :         shutdown alert.
      64              :     */
      65              :     stream_truncated = 3,
      66              : 
      67              :     /** Item not found condition.
      68              : 
      69              :         An `error_code` compares equal to `not_found` when a
      70              :         lookup operation failed to find the requested item.
      71              :     */
      72              :     not_found = 4
      73              : };
      74              : 
      75              : //-----------------------------------------------
      76              : 
      77              : } // capy
      78              : } // boost
      79              : 
      80              : namespace std {
      81              : template<>
      82              : struct is_error_condition_enum<
      83              :     ::boost::capy::cond>
      84              :     : std::true_type {};
      85              : } // std
      86              : 
      87              : namespace boost {
      88              : namespace capy {
      89              : 
      90              : //-----------------------------------------------
      91              : 
      92              : namespace detail {
      93              : 
      94              : struct BOOST_CAPY_SYMBOL_VISIBLE
      95              :     cond_cat_type
      96              :     : std::error_category
      97              : {
      98              :     BOOST_CAPY_DECL const char* name(
      99              :         ) const noexcept override;
     100              :     BOOST_CAPY_DECL std::string message(
     101              :         int) const override;
     102              :     BOOST_CAPY_DECL bool equivalent(
     103              :         std::error_code const& ec,
     104              :         int condition) const noexcept override;
     105              :     constexpr cond_cat_type() noexcept = default;
     106              : };
     107              : 
     108              : BOOST_CAPY_DECL extern cond_cat_type cond_cat;
     109              : 
     110              : } // detail
     111              : 
     112              : //-----------------------------------------------
     113              : 
     114              : inline
     115              : std::error_condition
     116         1010 : make_error_condition(
     117              :     cond ev) noexcept
     118              : {
     119         1010 :     return std::error_condition{
     120              :         static_cast<std::underlying_type<
     121              :             cond>::type>(ev),
     122         1010 :         detail::cond_cat};
     123              : }
     124              : 
     125              : } // capy
     126              : } // boost
     127              : 
     128              : #endif
        

Generated by: LCOV version 2.3