LCOV - code coverage report
Current view: top level - libs/http_proto/src - status.cpp (source / functions) Hit Total Coverage
Test: coverage_filtered.info Lines: 82 87 94.3 %
Date: 2024-03-08 19:26:15 Functions: 4 5 80.0 %

          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         616 : int_to_status(unsigned v)
      19             : {
      20         616 :     switch(static_cast<status>(v))
      21             :     {
      22             :     // 1xx
      23         610 :     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         610 :         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 1.15