Line data Source code
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/uri_reference_rule.hpp>
13 : #include <boost/url/rfc/uri_rule.hpp>
14 : #include <boost/url/rfc/relative_ref_rule.hpp>
15 : #include <boost/url/grammar/parse.hpp>
16 : #include <boost/url/grammar/variant_rule.hpp>
17 : #include <boost/variant2/variant.hpp>
18 :
19 : namespace boost {
20 : namespace urls {
21 :
22 : auto
23 2494 : implementation_defined::uri_reference_rule_t::
24 : parse(
25 : char const*& it,
26 : char const* const end
27 : ) const noexcept ->
28 : system::result<value_type>
29 : {
30 : auto rv = grammar::parse(
31 : it, end,
32 2494 : grammar::variant_rule(
33 : uri_rule,
34 2494 : relative_ref_rule));
35 2494 : if(! rv)
36 41 : return rv.error();
37 2453 : switch(rv->index())
38 : {
39 1301 : default:
40 : case 0:
41 1301 : return boost::variant2::get<0>(*rv);
42 1152 : case 1:
43 1152 : return boost::variant2::get<1>(*rv);
44 : }
45 : }
46 :
47 : } // urls
48 : } // boost
49 :
|