LCOV - code coverage report
Current view: top level - libs/url/src/rfc/detail - fragment_part_rule.hpp (source / functions) Hit Total Coverage
Test: coverage_filtered.info Lines: 13 13 100.0 %
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             : #ifndef BOOST_URL_RFC_DETAIL_FRAGMENT_PART_RULE_HPP
      11             : #define BOOST_URL_RFC_DETAIL_FRAGMENT_PART_RULE_HPP
      12             : 
      13             : #include "boost/url/rfc/pct_encoded_rule.hpp"
      14             : #include "charsets.hpp"
      15             : #include "boost/url/grammar/parse.hpp"
      16             : 
      17             : namespace boost {
      18             : namespace urls {
      19             : namespace detail {
      20             : 
      21             : /** Rule for fragment-part
      22             : 
      23             :     @par BNF
      24             :     @code
      25             :     fragment-part   = [ "#" fragment ]
      26             : 
      27             :     fragment        = *( pchar / "/" / "?" )
      28             :     @endcode
      29             : 
      30             :     @par Specification
      31             :     @li <a href="https://datatracker.ietf.org/doc/html/rfc3986#section-3.5"
      32             :         >3.5. Fragment (rfc3986)</a>
      33             : */
      34             : struct fragment_part_rule_t
      35             : {
      36             :     struct value_type
      37             :     {
      38             :         pct_string_view fragment;
      39             :         bool has_fragment = false;
      40             :     };
      41             : 
      42             :     system::result<value_type>
      43        3502 :     parse(
      44             :         char const*& it,
      45             :         char const* end
      46             :             ) const noexcept
      47             :     {
      48        3502 :         if( it == end ||
      49         383 :             *it != '#')
      50        3290 :             return {};
      51         212 :         ++it;
      52             :         auto rv = grammar::parse(
      53         212 :             it, end, pct_encoded_rule(
      54         212 :                 fragment_chars));
      55         212 :         if(! rv)
      56           2 :             return rv.error();
      57         210 :         value_type t;
      58         210 :         t.fragment = *rv;
      59         210 :         t.has_fragment = true;
      60         210 :         return t;
      61             :     }
      62             : };
      63             : constexpr fragment_part_rule_t fragment_part_rule{};
      64             : 
      65             : } // detail
      66             : } // urls
      67             : } // boost
      68             : 
      69             : #endif

Generated by: LCOV version 1.15