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

Generated by: LCOV version 2.1