LCOV - code coverage report
Current view: top level - src - status.cpp (source / functions) Coverage Total Hit Missed
Test: coverage_remapped.info Lines: 94.3 % 87 82 5
Test Date: 2026-06-13 19:44:58 Functions: 80.0 % 5 4 1

           TLA  Line data    Source code
       1                 : //
       2                 : // Copyright (c) 2021 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/http
       8                 : //
       9                 : 
      10                 : #include <boost/http/status.hpp>
      11                 : #include <boost/http/detail/except.hpp>
      12                 : //#include <boost/throw_exception.hpp>
      13                 : #include <ostream>
      14                 : 
      15                 : namespace boost {
      16                 : namespace http {
      17                 : 
      18                 : status
      19 HIT        5104 : int_to_status(unsigned v)
      20                 : {
      21            5104 :     switch(static_cast<status>(v))
      22                 :     {
      23                 :     // 1xx
      24            5098 :     case status::continue_:
      25                 :     case status::switching_protocols:
      26                 :     case status::processing:
      27                 :     case status::early_hints:
      28                 :         BOOST_FALLTHROUGH;
      29                 : 
      30                 :     // 2xx
      31                 :     case status::ok:
      32                 :     case status::created:
      33                 :     case status::accepted:
      34                 :     case status::non_authoritative_information:
      35                 :     case status::no_content:
      36                 :     case status::reset_content:
      37                 :     case status::partial_content:
      38                 :     case status::multi_status:
      39                 :     case status::already_reported:
      40                 :     case status::im_used:
      41                 :         BOOST_FALLTHROUGH;
      42                 : 
      43                 :     // 3xx
      44                 :     case status::multiple_choices:
      45                 :     case status::moved_permanently:
      46                 :     case status::found:
      47                 :     case status::see_other:
      48                 :     case status::not_modified:
      49                 :     case status::use_proxy:
      50                 :     case status::temporary_redirect:
      51                 :     case status::permanent_redirect:
      52                 :         BOOST_FALLTHROUGH;
      53                 : 
      54                 :     // 4xx
      55                 :     case status::bad_request:
      56                 :     case status::unauthorized:
      57                 :     case status::payment_required:
      58                 :     case status::forbidden:
      59                 :     case status::not_found:
      60                 :     case status::method_not_allowed:
      61                 :     case status::not_acceptable:
      62                 :     case status::proxy_authentication_required:
      63                 :     case status::request_timeout:
      64                 :     case status::conflict:
      65                 :     case status::gone:
      66                 :     case status::length_required:
      67                 :     case status::precondition_failed:
      68                 :     case status::payload_too_large:
      69                 :     case status::uri_too_long:
      70                 :     case status::unsupported_media_type:
      71                 :     case status::range_not_satisfiable:
      72                 :     case status::expectation_failed:
      73                 :     case status::misdirected_request:
      74                 :     case status::unprocessable_entity:
      75                 :     case status::locked:
      76                 :     case status::failed_dependency:
      77                 :     case status::too_early:
      78                 :     case status::upgrade_required:
      79                 :     case status::precondition_required:
      80                 :     case status::too_many_requests:
      81                 :     case status::request_header_fields_too_large:
      82                 :     case status::unavailable_for_legal_reasons:
      83                 :         BOOST_FALLTHROUGH;
      84                 : 
      85                 :     // 5xx
      86                 :     case status::internal_server_error:
      87                 :     case status::not_implemented:
      88                 :     case status::bad_gateway:
      89                 :     case status::service_unavailable:
      90                 :     case status::gateway_timeout:
      91                 :     case status::http_version_not_supported:
      92                 :     case status::variant_also_negotiates:
      93                 :     case status::insufficient_storage:
      94                 :     case status::loop_detected:
      95                 :     case status::not_extended:
      96                 :     case status::network_authentication_required:
      97            5098 :         return static_cast<status>(v);
      98                 : 
      99               6 :     default:
     100               6 :         break;
     101                 :     }
     102               6 :     return status::unknown;
     103                 : }
     104                 : 
     105                 : status_class
     106             124 : to_status_class(unsigned v)
     107                 : {
     108             124 :     switch(v / 100)
     109                 :     {
     110               8 :     case 1: return status_class::informational;
     111              20 :     case 2: return status_class::successful;
     112              16 :     case 3: return status_class::redirection;
     113              56 :     case 4: return status_class::client_error;
     114              22 :     case 5: return status_class::server_error;
     115               2 :     default:
     116               2 :         break;
     117                 :     }
     118               2 :     return status_class::unknown;
     119                 : }
     120                 : 
     121                 : status_class
     122              62 : to_status_class(status v)
     123                 : {
     124              62 :     return to_status_class(static_cast<int>(v));
     125                 : }
     126                 : 
     127                 : core::string_view
     128              78 : to_string(
     129                 :     status v)
     130                 : {
     131              78 :     switch(static_cast<status>(v))
     132                 :     {
     133                 :     // 1xx
     134               1 :     case status::continue_:                             return "Continue";
     135               2 :     case status::switching_protocols:                   return "Switching Protocols";
     136               1 :     case status::processing:                            return "Processing";
     137               1 :     case status::early_hints:                           return "Early Hints";
     138                 : 
     139                 :     // 2xx
     140               4 :     case status::ok:                                    return "OK";
     141               1 :     case status::created:                               return "Created";
     142               1 :     case status::accepted:                              return "Accepted";
     143               1 :     case status::non_authoritative_information:         return "Non-Authoritative Information";
     144               1 :     case status::no_content:                            return "No Content";
     145               1 :     case status::reset_content:                         return "Reset Content";
     146               1 :     case status::partial_content:                       return "Partial Content";
     147               1 :     case status::multi_status:                          return "Multi-Status";
     148               1 :     case status::already_reported:                      return "Already Reported";
     149               1 :     case status::im_used:                               return "IM Used";
     150                 : 
     151                 :     // 3xx
     152               1 :     case status::multiple_choices:                      return "Multiple Choices";
     153               1 :     case status::moved_permanently:                     return "Moved Permanently";
     154               1 :     case status::found:                                 return "Found";
     155               1 :     case status::see_other:                             return "See Other";
     156               1 :     case status::not_modified:                          return "Not Modified";
     157               1 :     case status::use_proxy:                             return "Use Proxy";
     158               1 :     case status::temporary_redirect:                    return "Temporary Redirect";
     159               1 :     case status::permanent_redirect:                    return "Permanent Redirect";
     160                 : 
     161                 :     // 4xx
     162               2 :     case status::bad_request:                           return "Bad Request";
     163               1 :     case status::unauthorized:                          return "Unauthorized";
     164               1 :     case status::payment_required:                      return "Payment Required";
     165               1 :     case status::forbidden:                             return "Forbidden";
     166              13 :     case status::not_found:                             return "Not Found";
     167               1 :     case status::method_not_allowed:                    return "Method Not Allowed";
     168               1 :     case status::not_acceptable:                        return "Not Acceptable";
     169               1 :     case status::proxy_authentication_required:         return "Proxy Authentication Required";
     170               1 :     case status::request_timeout:                       return "Request Timeout";
     171               1 :     case status::conflict:                              return "Conflict";
     172               1 :     case status::gone:                                  return "Gone";
     173               1 :     case status::length_required:                       return "Length Required";
     174               1 :     case status::precondition_failed:                   return "Precondition Failed";
     175               1 :     case status::payload_too_large:                     return "Payload Too Large";
     176               1 :     case status::uri_too_long:                          return "URI Too Long";
     177               1 :     case status::unsupported_media_type:                return "Unsupported Media Type";
     178               1 :     case status::range_not_satisfiable:                 return "Range Not Satisfiable";
     179               1 :     case status::expectation_failed:                    return "Expectation Failed";
     180               1 :     case status::misdirected_request:                   return "Misdirected Request";
     181               1 :     case status::unprocessable_entity:                  return "Unprocessable Entity";
     182               1 :     case status::locked:                                return "Locked";
     183               1 :     case status::failed_dependency:                     return "Failed Dependency";
     184               1 :     case status::too_early:                             return "Too Early";
     185               1 :     case status::upgrade_required:                      return "Upgrade Required";
     186               1 :     case status::precondition_required:                 return "Precondition Required";
     187               1 :     case status::too_many_requests:                     return "Too Many Requests";
     188               1 :     case status::request_header_fields_too_large:       return "Request Header Fields Too Large";
     189               1 :     case status::unavailable_for_legal_reasons:         return "Unavailable For Legal Reasons";
     190                 : 
     191                 :     // 5xx
     192               1 :     case status::internal_server_error:                 return "Internal Server Error";
     193               1 :     case status::not_implemented:                       return "Not Implemented";
     194               1 :     case status::bad_gateway:                           return "Bad Gateway";
     195               1 :     case status::service_unavailable:                   return "Service Unavailable";
     196               1 :     case status::gateway_timeout:                       return "Gateway Timeout";
     197               1 :     case status::http_version_not_supported:            return "HTTP Version Not Supported";
     198               1 :     case status::variant_also_negotiates:               return "Variant Also Negotiates";
     199               1 :     case status::insufficient_storage:                  return "Insufficient Storage";
     200               1 :     case status::loop_detected:                         return "Loop Detected";
     201               1 :     case status::not_extended:                          return "Not Extended";
     202               1 :     case status::network_authentication_required:       return "Network Authentication Required";
     203                 : 
     204 MIS           0 :     default:
     205               0 :         break;
     206                 :     }
     207               0 :     return "<unknown-status>";
     208                 : }
     209                 : 
     210                 : std::ostream&
     211               0 : operator<<(std::ostream& os, status v)
     212                 : {
     213               0 :     return os << to_string(v);
     214                 : }
     215                 : 
     216                 : } // http
     217                 : } // boost
        

Generated by: LCOV version 2.3