GCC Code Coverage Report


Directory: libs/url/
File: libs/url/src/rfc/detail/fragment_part_rule.hpp
Date: 2024-03-15 21:27:27
Exec Total Coverage
Lines: 13 13 100.0%
Functions: 1 1 100.0%
Branches: 6 6 100.0%

Line Branch Exec Source
1 //
2 // Copyright (c) 2016-2019 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 // Official repository: https://github.com/boostorg/url
8 //
9
10 #ifndef BOOST_URL_RFC_DETAIL_FRAGMENT_PART_RULE_HPP
11 #define BOOST_URL_RFC_DETAIL_FRAGMENT_PART_RULE_HPP
12
13 #include "boost/url/rfc/pct_encoded_rule.hpp"
14 #include "charsets.hpp"
15 #include "boost/url/grammar/parse.hpp"
16
17 namespace boost {
18 namespace urls {
19 namespace detail {
20
21 /** Rule for fragment-part
22
23 @par BNF
24 @code
25 fragment-part = [ "#" fragment ]
26
27 fragment = *( pchar / "/" / "?" )
28 @endcode
29
30 @par Specification
31 @li <a href="https://datatracker.ietf.org/doc/html/rfc3986#section-3.5"
32 >3.5. Fragment (rfc3986)</a>
33 */
34 struct fragment_part_rule_t
35 {
36 struct value_type
37 {
38 pct_string_view fragment;
39 bool has_fragment = false;
40 };
41
42 system::result<value_type>
43 3502 parse(
44 char const*& it,
45 char const* end
46 ) const noexcept
47 {
48
2/2
✓ Branch 0 taken 383 times.
✓ Branch 1 taken 3119 times.
3502 if( it == end ||
49
2/2
✓ Branch 0 taken 171 times.
✓ Branch 1 taken 212 times.
383 *it != '#')
50 3290 return {};
51 212 ++it;
52 auto rv = grammar::parse(
53 212 it, end, pct_encoded_rule(
54 212 fragment_chars));
55
2/2
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 210 times.
212 if(! rv)
56 2 return rv.error();
57 210 value_type t;
58 210 t.fragment = *rv;
59 210 t.has_fragment = true;
60 210 return t;
61 }
62 };
63 constexpr fragment_part_rule_t fragment_part_rule{};
64
65 } // detail
66 } // urls
67 } // boost
68
69 #endif
70