include/boost/url/impl/error.hpp

100.0% Lines (27/27) 100.0% Functions (6/6)
include/boost/url/impl/error.hpp
Line TLA Hits Source Code
1 //
2 // Copyright (c) 2019 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/boostorg/url
8 //
9
10 #ifndef BOOST_URL_IMPL_ERROR_HPP
11 #define BOOST_URL_IMPL_ERROR_HPP
12
13 #include <boost/url/grammar/error.hpp>
14 #include <type_traits>
15
16 namespace boost {
17
18 //-----------------------------------------------
19 namespace system {
20 template<>
21 struct is_error_code_enum<::boost::urls::error>
22 {
23 static bool const value = true;
24 };
25 } // system
26 //-----------------------------------------------
27
28 namespace urls {
29
30 namespace detail {
31
32 struct BOOST_SYMBOL_VISIBLE
33 error_cat_type
34 : system::error_category
35 {
36 BOOST_URL_CXX20_CONSTEXPR
37 87 const char* name(
38 ) const noexcept override
39 {
40 87 return "boost.url";
41 }
42
43 88 std::string message(
44 int code) const override
45 {
46 176 return message(code, nullptr, 0);
47 }
48
49 BOOST_URL_CXX20_CONSTEXPR
50 88 char const* message(
51 int code,
52 char*,
53 std::size_t) const noexcept override
54 {
55 88 switch(static_cast<error>(code))
56 {
57 1 case error::success: return "success";
58 1 case error::illegal_null: return "illegal null";
59 1 case error::illegal_reserved_char: return "illegal reserved char";
60 1 case error::non_canonical: return "non canonical";
61 17 case error::bad_pct_hexdig: return "bad hexdig in pct-encoding";
62 63 case error::incomplete_encoding: return "incomplete pct-encoding";
63 1 case error::missing_pct_hexdig: return "missing hexdig in pct-encoding";
64 1 case error::no_space: return "no space";
65 1 case error::not_a_base: return "not a base";
66 }
67 1 return "";
68 }
69
70 BOOST_URL_CXX20_CONSTEXPR
71 system::error_condition
72 default_error_condition(
73 int ev) const noexcept override;
74
75 75 BOOST_SYSTEM_CONSTEXPR error_cat_type() noexcept
76 75 : error_category(0xbc15399d7a4ce829)
77 {
78 75 }
79 };
80
81 #if defined(BOOST_URL_HAS_CXX20_CONSTEXPR)
82 inline constexpr error_cat_type error_cat{};
83 #else
84 BOOST_URL_DECL extern error_cat_type error_cat;
85 #endif
86
87 } // detail
88
89 inline
90 BOOST_SYSTEM_CONSTEXPR
91 system::error_code
92 98 make_error_code(
93 error ev) noexcept
94 {
95 return system::error_code{
96 static_cast<std::underlying_type<
97 error>::type>(ev),
98 98 detail::error_cat};
99 }
100
101 BOOST_URL_CXX20_CONSTEXPR_OR_INLINE
102 system::error_condition
103 9 detail::error_cat_type::
104 default_error_condition(
105 int ev) const noexcept
106 {
107 9 switch(static_cast<error>(ev))
108 {
109 6 default:
110 6 return {ev, *this};
111 3 case error::bad_pct_hexdig:
112 case error::incomplete_encoding:
113 case error::missing_pct_hexdig:
114 3 return grammar::condition::fatal;
115 }
116 }
117
118 } // urls
119 } // boost
120
121 #endif
122