LCOV - code coverage report
Current view: top level - libs/url/src/rfc/uri_rule.cpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 97.0 % 33 32
Test Date: 2025-01-10 18:07:09 Functions: 100.0 % 1 1

            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_rule.hpp>
      13              : #include <boost/url/rfc/query_rule.hpp>
      14              : #include "detail/fragment_part_rule.hpp"
      15              : #include "detail/hier_part_rule.hpp"
      16              : #include "detail/query_part_rule.hpp"
      17              : #include "detail/scheme_rule.hpp"
      18              : #include <boost/url/grammar/delim_rule.hpp>
      19              : #include <boost/url/grammar/tuple_rule.hpp>
      20              : #include <boost/url/grammar/optional_rule.hpp>
      21              : #include <boost/url/grammar/parse.hpp>
      22              : 
      23              : namespace boost {
      24              : namespace urls {
      25              : 
      26              : auto
      27         3406 : implementation_defined::uri_rule_t::
      28              : parse(
      29              :     char const*& it,
      30              :     char const* const end
      31              :         ) const noexcept ->
      32              :     system::result<value_type>
      33              : {
      34         3406 :     detail::url_impl u(detail::url_impl::from::string);
      35         3406 :     u.cs_ = it;
      36              : 
      37              :     // scheme
      38              :     {
      39         3406 :         auto rv = grammar::parse(
      40              :             it, end,
      41         3406 :             grammar::tuple_rule(
      42         3406 :                 detail::scheme_rule(),
      43         3406 :                 grammar::squelch(
      44         3406 :                     grammar::delim_rule(':'))));
      45         3406 :         if(! rv)
      46         1161 :             return rv.error();
      47         2245 :         u.apply_scheme(rv->scheme);
      48              :     }
      49              : 
      50              :     // hier_part
      51              :     {
      52              :         auto rv = grammar::parse(
      53              :             it, end,
      54         2245 :             detail::hier_part_rule);
      55         2245 :         if(! rv)
      56           35 :             return rv.error();
      57         2210 :         if(rv->has_authority)
      58         1441 :             u.apply_authority(rv->authority);
      59         2210 :         u.apply_path(
      60         2210 :             rv->path,
      61         2210 :             rv->segment_count);
      62         2245 :     }
      63              : 
      64              :     // [ "?" query ]
      65              :     {
      66         2210 :         auto rv = grammar::parse(
      67              :             it, end, detail::query_part_rule);
      68         2210 :         if(! rv)
      69            0 :             return rv.error();
      70         2210 :         if(rv->has_query)
      71              :         {
      72              :             // map "?" to { {} }
      73          193 :             u.apply_query(
      74          193 :                 rv->query,
      75          193 :                 rv->count);
      76              :         }
      77              :     }
      78              : 
      79              :     // [ "#" fragment ]
      80              :     {
      81         2210 :         auto rv = grammar::parse(
      82              :             it, end, detail::fragment_part_rule);
      83         2210 :         if(! rv)
      84            1 :             return rv.error();
      85         2209 :         if(rv->has_fragment)
      86          151 :             u.apply_frag(rv->fragment);
      87              :     }
      88              : 
      89         2209 :     return u.construct();
      90              : }
      91              : 
      92              : } // urls
      93              : } // boost
      94              : 
        

Generated by: LCOV version 2.1