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_IMPL_USERINFO_RULE_IPP | ||
11 | #define BOOST_URL_RFC_DETAIL_IMPL_USERINFO_RULE_IPP | ||
12 | |||
13 | #include <boost/url/detail/config.hpp> | ||
14 | #include "userinfo_rule.hpp" | ||
15 | #include <boost/core/detail/string_view.hpp> | ||
16 | #include <boost/url/rfc/pct_encoded_rule.hpp> | ||
17 | #include <boost/url/rfc/sub_delim_chars.hpp> | ||
18 | #include <boost/url/rfc/unreserved_chars.hpp> | ||
19 | #include <boost/url/grammar/parse.hpp> | ||
20 | |||
21 | namespace boost { | ||
22 | namespace urls { | ||
23 | namespace detail { | ||
24 | |||
25 | auto | ||
26 | 1794 | userinfo_rule_t:: | |
27 | parse( | ||
28 | char const*& it, | ||
29 | char const* const end | ||
30 | ) const noexcept -> | ||
31 | system::result<value_type> | ||
32 | { | ||
33 | static constexpr auto uchars = | ||
34 | unreserved_chars + | ||
35 | sub_delim_chars; | ||
36 | static constexpr auto pwchars = | ||
37 | uchars + ':'; | ||
38 | |||
39 | 1794 | value_type t; | |
40 | |||
41 | // user | ||
42 | auto rv = grammar::parse( | ||
43 | 1794 | it, end, pct_encoded_rule( | |
44 | 1794 | grammar::ref(uchars))); | |
45 |
2/2✓ Branch 1 taken 8 times.
✓ Branch 2 taken 1786 times.
|
1794 | if(! rv) |
46 | 8 | return rv.error(); | |
47 | 1786 | t.user = *rv; | |
48 | |||
49 | // ':' | ||
50 |
2/2✓ Branch 0 taken 1529 times.
✓ Branch 1 taken 257 times.
|
1786 | if( it == end || |
51 |
2/2✓ Branch 0 taken 1124 times.
✓ Branch 1 taken 405 times.
|
1529 | *it != ':') |
52 | { | ||
53 | 1381 | t.has_password = false; | |
54 | 1381 | t.password = {}; | |
55 | 1381 | return t; | |
56 | } | ||
57 | 405 | ++it; | |
58 | |||
59 | // pass | ||
60 | rv = grammar::parse( | ||
61 | 405 | it, end, pct_encoded_rule( | |
62 | 405 | grammar::ref(pwchars))); | |
63 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 405 times.
|
405 | if(! rv) |
64 | ✗ | return rv.error(); | |
65 | |||
66 | 405 | t.has_password = true; | |
67 | 405 | t.password = *rv; | |
68 | 405 | return t; | |
69 | } | ||
70 | |||
71 | } // detail | ||
72 | } // urls | ||
73 | } // boost | ||
74 | |||
75 | #endif | ||
76 |