GCC Code Coverage Report


Directory: libs/url/
File: libs/url/src/rfc/detail/ipvfuture_rule.cpp
Date: 2024-08-19 20:08:56
Exec Total Coverage
Lines: 17 19 89.5%
Functions: 1 1 100.0%
Branches: 4 6 66.7%

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 "ipvfuture_rule.hpp"
13 #include <boost/url/error.hpp>
14 #include "charsets.hpp"
15 #include <boost/url/grammar/charset.hpp>
16 #include <boost/url/grammar/delim_rule.hpp>
17 #include <boost/url/grammar/hexdig_chars.hpp>
18 #include <boost/url/grammar/parse.hpp>
19 #include <boost/url/grammar/token_rule.hpp>
20 #include <boost/url/grammar/tuple_rule.hpp>
21
22 namespace boost {
23 namespace urls {
24 namespace detail {
25
26 auto
27 38 ipvfuture_rule_t::
28 parse(
29 char const*& it,
30 char const* const end
31 ) const noexcept ->
32 system::result<value_type>
33 {
34 static constexpr auto
35 minor_chars =
36 unreserved_chars +
37 sub_delim_chars + ':';
38 38 auto const it0 = it;
39 auto rv = grammar::parse(
40 it, end,
41 38 grammar::tuple_rule(
42 38 grammar::delim_rule('v'),
43 38 grammar::token_rule(
44 grammar::hexdig_chars),
45 38 grammar::delim_rule('.'),
46 76 grammar::token_rule(minor_chars)));
47
2/2
✓ Branch 1 taken 23 times.
✓ Branch 2 taken 15 times.
38 if(! rv)
48 23 return rv.error();
49 15 value_type t;
50 15 t.major = std::get<0>(*rv);
51 15 t.minor = std::get<1>(*rv);
52
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
15 if(t.major.empty())
53 {
54 // can't be empty
55 BOOST_URL_RETURN_EC(
56 grammar::error::invalid);
57 }
58
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
15 if(t.minor.empty())
59 {
60 // can't be empty
61 BOOST_URL_RETURN_EC(
62 grammar::error::invalid);
63 }
64 30 t.str = core::string_view(
65 15 it0, it - it0);
66 15 return t;
67 }
68
69 } // detail
70 } // urls
71 } // boost
72
73