LCOV - code coverage report
Current view: top level - libs/http_proto/src/status.cpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 94.3 % 87 82
Test Date: 2025-10-27 13:02:03 Functions: 80.0 % 5 4

            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_proto
       8              : //
       9              : 
      10              : #include <boost/http_proto/status.hpp>
      11              : #include <boost/http_proto/detail/except.hpp>
      12              : //#include <boost/throw_exception.hpp>
      13              : #include <ostream>
      14              : 
      15              : namespace boost {
      16              : namespace http_proto {
      17              : 
      18              : status
      19         1089 : int_to_status(unsigned v)
      20              : {
      21         1089 :     switch(static_cast<status>(v))
      22              :     {
      23              :     // 1xx
      24         1083 :     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         1083 :         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           77 : obsolete_reason(
     129              :     status v)
     130              : {
     131           77 :     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            3 :     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            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 << obsolete_reason(v);
     214              : }
     215              : 
     216              : } // http_proto
     217              : } // boost
        

Generated by: LCOV version 2.1