LCOV - code coverage report
Current view: top level - libs/url/src/rfc/detail - userinfo_rule.cpp (source / functions) Hit Total Coverage
Test: coverage_filtered.info Lines: 19 20 95.0 %
Date: 2024-03-05 20:06:56 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 "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        1794 : 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        1794 :     value_type t;
      38             : 
      39             :     // user
      40             :     auto rv = grammar::parse(
      41        1794 :         it, end, pct_encoded_rule(
      42        1794 :             grammar::ref(uchars)));
      43        1794 :     if(! rv)
      44           8 :         return rv.error();
      45        1786 :     t.user = *rv;
      46             : 
      47             :     // ':'
      48        1786 :     if( it == end ||
      49        1529 :         *it != ':')
      50             :     {
      51        1381 :         t.has_password = false;
      52        1381 :         t.password = {};
      53        1381 :         return t;
      54             :     }
      55         405 :     ++it;
      56             : 
      57             :     // pass
      58             :     rv = grammar::parse(
      59         405 :         it, end, pct_encoded_rule(
      60         405 :             grammar::ref(pwchars)));
      61         405 :     if(! rv)
      62           0 :         return rv.error();
      63             : 
      64         405 :     t.has_password = true;
      65         405 :     t.password = *rv;
      66         405 :     return t;
      67             : }
      68             : 
      69             : } // detail
      70             : } // urls
      71             : } // boost
      72             : 

Generated by: LCOV version 1.15