Line data Source code
1 : //
2 : // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
3 : // Copyright (c) 2022 Alan de Freitas (alandefreitas@gmail.com)
4 : //
5 : // Distributed under the Boost Software License, Version 1.0. (See accompanying
6 : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 : //
8 : // Official repository: https://github.com/CPPAlliance/url
9 : //
10 :
11 :
12 : #include <boost/url/detail/config.hpp>
13 : #include <boost/url/parse_query.hpp>
14 : #include <boost/url/rfc/query_rule.hpp>
15 : #include <boost/url/grammar/parse.hpp>
16 :
17 : #include <boost/url/error.hpp>
18 :
19 : namespace boost {
20 : namespace urls {
21 :
22 : system::result<params_encoded_view>
23 137 : parse_query(core::string_view s) noexcept
24 : {
25 : // Handle empty strings differently.
26 : // We produce {}, versus empty but
27 : // present query in URL (e.g. "http:?")
28 : // which produces {{"", none}}.
29 137 : if(s.empty())
30 8 : return params_encoded_view(
31 16 : detail::query_ref(
32 8 : s.data(), 0, 0));
33 129 : auto rv = grammar::parse(s, query_rule);
34 129 : if(! rv)
35 12 : return rv.error();
36 117 : return params_encoded_view(
37 234 : detail::query_ref(
38 234 : s, s.size(), rv->size()));
39 : }
40 :
41 : } // urls
42 : } // boost
43 :
|