LCOV - code coverage report
Current view: top level - libs/url/src/rfc - authority_rule.cpp (source / functions) Hit Total Coverage
Test: coverage_filtered.info Lines: 25 27 92.6 %
Date: 2024-04-08 19:38:36 Functions: 1 1 100.0 %

          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/authority_rule.hpp>
      13             : #include <boost/url/grammar/delim_rule.hpp>
      14             : #include <boost/url/grammar/optional_rule.hpp>
      15             : #include <boost/url/grammar/parse.hpp>
      16             : #include <boost/url/grammar/tuple_rule.hpp>
      17             : #include "detail/host_rule.hpp"
      18             : #include "detail/port_rule.hpp"
      19             : #include "detail/userinfo_rule.hpp"
      20             : 
      21             : namespace boost {
      22             : namespace urls {
      23             : 
      24             : auto
      25        1897 : authority_rule_t::
      26             : parse(
      27             :     char const*& it,
      28             :     char const* const end
      29             :         ) const noexcept ->
      30             :     system::result<value_type>
      31             : {
      32        1897 :     detail::url_impl u(detail::url_impl::from::authority);
      33        1897 :     u.cs_ = it;
      34             : 
      35             :     // [ userinfo "@" ]
      36             :     {
      37             :         auto rv = grammar::parse(
      38             :             it, end,
      39        1897 :             grammar::optional_rule(
      40        1897 :                 grammar::tuple_rule(
      41             :                     detail::userinfo_rule,
      42        1897 :                     grammar::squelch(
      43        1897 :                         grammar::delim_rule('@')))));
      44        1897 :         if(! rv)
      45           0 :             return rv.error();
      46        1897 :         if(rv->has_value())
      47             :         {
      48         129 :             u.apply_userinfo(
      49         381 :                 (*rv)->user,
      50         381 :                 (*rv)->has_password
      51         252 :                 ? &(*rv)->password
      52             :                 : nullptr);
      53             :         }
      54             :     }
      55             : 
      56             :     // host
      57             :     {
      58             :         auto rv = grammar::parse(
      59        1897 :             it, end, detail::host_rule);
      60        1897 :         if(! rv)
      61          31 :             return rv.error();
      62        1866 :         u.apply_host(rv->host_type,
      63        1866 :             rv->match, rv->addr);
      64             :     }
      65             : 
      66             :     // [ ":" port ]
      67             :     {
      68             :         auto rv = grammar::parse(
      69        1866 :             it, end, detail::port_part_rule);
      70        1866 :         if(! rv)
      71           0 :             return rv.error();
      72        1866 :         if(rv->has_port)
      73         260 :             u.apply_port(
      74         260 :                 rv->port,
      75         260 :                 rv->port_number);
      76             :     }
      77             : 
      78        1866 :     return u.construct_authority();
      79             : }
      80             : 
      81             : } // urls
      82             : } // boost
      83             : 

Generated by: LCOV version 1.15