LCOV - code coverage report
Current view: top level - libs/url/src/rfc/authority_rule.cpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 92.9 % 28 26
Test Date: 2024-08-19 20:08:54 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/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         1901 : implementation_defined::authority_rule_t::
      26              : parse(
      27              :     char const*& it,
      28              :     char const* const end
      29              :         ) const noexcept ->
      30              :     system::result<value_type>
      31              : {
      32         1901 :     detail::url_impl u(detail::url_impl::from::authority);
      33         1901 :     u.cs_ = it;
      34              : 
      35              :     // [ userinfo "@" ]
      36              :     {
      37              :         auto rv = grammar::parse(
      38              :             it, end,
      39         1901 :             grammar::optional_rule(
      40         1901 :                 grammar::tuple_rule(
      41              :                     detail::userinfo_rule,
      42         1901 :                     grammar::squelch(
      43         3802 :                         grammar::delim_rule('@')))));
      44         1901 :         if(! rv)
      45            0 :             return rv.error();
      46         1901 :         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         1901 :     }
      55              : 
      56              :     // host
      57              :     {
      58         1901 :         auto rv = grammar::parse(
      59              :             it, end, detail::host_rule);
      60         1901 :         if(! rv)
      61           31 :             return rv.error();
      62         1870 :         u.apply_host(rv->host_type,
      63         1870 :             rv->match, rv->addr);
      64              :     }
      65              : 
      66              :     // [ ":" port ]
      67              :     {
      68         1870 :         auto rv = grammar::parse(
      69              :             it, end, detail::port_part_rule);
      70         1870 :         if(! rv)
      71            0 :             return rv.error();
      72         1870 :         if(rv->has_port)
      73          260 :             u.apply_port(
      74          260 :                 rv->port,
      75          260 :                 rv->port_number);
      76              :     }
      77              : 
      78         1870 :     return u.construct_authority();
      79              : }
      80              : 
      81              : } // urls
      82              : } // boost
      83              : 
        

Generated by: LCOV version 2.1