TLA Line data 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 HIT 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
|