]> git.proxmox.com Git - ceph.git/blob - ceph/src/Beast/include/beast/http/impl/error.ipp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / Beast / include / beast / http / impl / error.ipp
1 //
2 // Copyright (c) 2013-2017 Vinnie Falco (vinnie dot falco at gmail dot 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
8 #ifndef BEAST_HTTP_IMPL_ERROR_IPP
9 #define BEAST_HTTP_IMPL_ERROR_IPP
10
11 #include <type_traits>
12
13 namespace boost {
14 namespace system {
15 template<>
16 struct is_error_code_enum<beast::http::error>
17 {
18 static bool const value = true;
19 };
20 } // system
21 } // boost
22
23 namespace beast {
24 namespace http {
25 namespace detail {
26
27 class http_error_category : public error_category
28 {
29 public:
30 const char*
31 name() const noexcept override
32 {
33 return "http";
34 }
35
36 std::string
37 message(int ev) const override
38 {
39 switch(static_cast<error>(ev))
40 {
41 default:
42 case error::end_of_stream: return "end of stream";
43 case error::partial_message: return "partial message";
44 case error::buffer_overflow: return "buffer overflow";
45 case error::bad_line_ending: return "bad line ending";
46 case error::bad_method: return "bad method";
47 case error::bad_path: return "bad path";
48 case error::bad_version: return "bad version";
49 case error::bad_status: return "bad status";
50 case error::bad_reason: return "bad reason";
51 case error::bad_field: return "bad field";
52 case error::bad_value: return "bad value";
53 case error::bad_content_length: return "bad Content-Length";
54 case error::bad_transfer_encoding: return "bad Transfer-Encoding";
55 case error::bad_chunk: return "bad chunk";
56 }
57 }
58
59 error_condition
60 default_error_condition(
61 int ev) const noexcept override
62 {
63 return error_condition{ev, *this};
64 }
65
66 bool
67 equivalent(int ev,
68 error_condition const& condition
69 ) const noexcept override
70 {
71 return condition.value() == ev &&
72 &condition.category() == this;
73 }
74
75 bool
76 equivalent(error_code const& error,
77 int ev) const noexcept override
78 {
79 return error.value() == ev &&
80 &error.category() == this;
81 }
82 };
83
84 inline
85 error_category const&
86 get_http_error_category()
87 {
88 static http_error_category const cat{};
89 return cat;
90 }
91
92 } // detail
93
94 inline
95 error_code
96 make_error_code(error ev)
97 {
98 return error_code{
99 static_cast<std::underlying_type<error>::type>(ev),
100 detail::get_http_error_category()};
101 }
102
103 } // http
104 } // beast
105
106 #endif