LCOV - code coverage report
Current view: top level - libs/url/src/rfc/detail/userinfo_rule.cpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 95.5 % 22 21
Test Date: 2024-08-20 16:05:53 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 "userinfo_rule.hpp"
      13              : #include <boost/core/detail/string_view.hpp>
      14              : #include <boost/url/rfc/pct_encoded_rule.hpp>
      15              : #include <boost/url/rfc/sub_delim_chars.hpp>
      16              : #include <boost/url/rfc/unreserved_chars.hpp>
      17              : #include <boost/url/grammar/parse.hpp>
      18              : 
      19              : namespace boost {
      20              : namespace urls {
      21              : namespace detail {
      22              : 
      23              : auto
      24         1815 : userinfo_rule_t::
      25              : parse(
      26              :     char const*& it,
      27              :     char const* const end
      28              :         ) const noexcept ->
      29              :     system::result<value_type>
      30              : {
      31              :     static constexpr auto uchars =
      32              :         unreserved_chars +
      33              :         sub_delim_chars;
      34              :     static constexpr auto pwchars =
      35              :         uchars + ':';
      36              : 
      37         1815 :     value_type t;
      38              : 
      39              :     // user
      40         1815 :     auto rv = grammar::parse(
      41         1815 :         it, end, pct_encoded_rule(
      42         1815 :             grammar::ref(uchars)));
      43         1815 :     if(! rv)
      44            8 :         return rv.error();
      45         1807 :     t.user = *rv;
      46              : 
      47              :     // ':'
      48         1807 :     if( it == end ||
      49         1548 :         *it != ':')
      50              :     {
      51         1389 :         t.has_password = false;
      52         1389 :         t.password = {};
      53         1389 :         return t;
      54              :     }
      55          418 :     ++it;
      56              : 
      57              :     // pass
      58          418 :     rv = grammar::parse(
      59          418 :         it, end, pct_encoded_rule(
      60          418 :             grammar::ref(pwchars)));
      61          418 :     if(! rv)
      62            0 :         return rv.error();
      63              : 
      64          418 :     t.has_password = true;
      65          418 :     t.password = *rv;
      66          418 :     return t;
      67              : }
      68              : 
      69              : } // detail
      70              : } // urls
      71              : } // boost
      72              : 
        

Generated by: LCOV version 2.1