GCC Code Coverage Report


Directory: libs/url/
File: libs/url/src/rfc/authority_rule.cpp
Date: 2024-03-05 20:06:57
Exec Total Coverage
Lines: 25 27 92.6%
Functions: 1 1 100.0%
Branches: 10 12 83.3%

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
11 #include <boost/url/detail/config.hpp>
12 #include <boost/url/rfc/authority_rule.hpp>
13 #include <boost/url/grammar/delim_rule.hpp>
14 #include <boost/url/grammar/optional_rule.hpp>
15 #include <boost/url/grammar/parse.hpp>
16 #include <boost/url/grammar/tuple_rule.hpp>
17 #include "detail/host_rule.hpp"
18 #include "detail/port_rule.hpp"
19 #include "detail/userinfo_rule.hpp"
20
21 namespace boost {
22 namespace urls {
23
24 auto
25 1879 authority_rule_t::
26 parse(
27 char const*& it,
28 char const* const end
29 ) const noexcept ->
30 system::result<value_type>
31 {
32 1879 detail::url_impl u(detail::url_impl::from::authority);
33 1879 u.cs_ = it;
34
35 // [ userinfo "@" ]
36 {
37 auto rv = grammar::parse(
38 it, end,
39 1879 grammar::optional_rule(
40 1879 grammar::tuple_rule(
41 detail::userinfo_rule,
42 1879 grammar::squelch(
43 1879 grammar::delim_rule('@')))));
44
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1879 times.
1879 if(! rv)
45 return rv.error();
46
2/2
✓ Branch 2 taken 380 times.
✓ Branch 3 taken 1499 times.
1879 if(rv->has_value())
47 {
48 129 u.apply_userinfo(
49 380 (*rv)->user,
50
2/2
✓ Branch 2 taken 251 times.
✓ Branch 3 taken 129 times.
380 (*rv)->has_password
51 251 ? &(*rv)->password
52 : nullptr);
53 }
54 }
55
56 // host
57 {
58 auto rv = grammar::parse(
59 1879 it, end, detail::host_rule);
60
2/2
✓ Branch 1 taken 31 times.
✓ Branch 2 taken 1848 times.
1879 if(! rv)
61 31 return rv.error();
62 1848 u.apply_host(rv->host_type,
63 1848 rv->match, rv->addr);
64 }
65
66 // [ ":" port ]
67 {
68 auto rv = grammar::parse(
69 1848 it, end, detail::port_part_rule);
70
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1848 times.
1848 if(! rv)
71 return rv.error();
72
2/2
✓ Branch 1 taken 247 times.
✓ Branch 2 taken 1601 times.
1848 if(rv->has_port)
73 247 u.apply_port(
74 247 rv->port,
75 247 rv->port_number);
76 }
77
78 1848 return u.construct_authority();
79 }
80
81 } // urls
82 } // boost
83
84