include/boost/url/grammar/not_empty_rule.hpp

100.0% Lines (5/5) 100.0% Functions (2/2) -% Branches (0/0)
include/boost/url/grammar/not_empty_rule.hpp
Line Hits Source Code
1 //
2 // Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
3 // Copyright (c) 2022 Alan de Freitas (alandefreitas@gmail.com)
4 //
5 // Distributed under the Boost Software License, Version 1.0. (See accompanying
6 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 //
8 // Official repository: https://github.com/boostorg/url
9 //
10
11 #ifndef BOOST_URL_GRAMMAR_NOT_EMPTY_RULE_HPP
12 #define BOOST_URL_GRAMMAR_NOT_EMPTY_RULE_HPP
13
14 #include <boost/url/detail/config.hpp>
15 #include <boost/url/error_types.hpp>
16 #include <boost/url/grammar/type_traits.hpp>
17
18 namespace boost {
19 namespace urls {
20 namespace grammar {
21
22 namespace implementation_defined {
23 template<class R>
24 struct not_empty_rule_t
25 {
26 using value_type =
27 typename R::value_type;
28
29 BOOST_URL_CXX14_CONSTEXPR
30 auto
31 parse(
32 char const*& it,
33 char const* end) const ->
34 system::result<value_type>;
35
36 constexpr
37 1 not_empty_rule_t(
38 R const& r) noexcept
39 1 : r_(r)
40 {
41 1 }
42
43 private:
44 R r_;
45 };
46 } // implementation_defined
47
48 /** Match another rule, if the result is not empty
49
50 This adapts another rule such that
51 when an empty string is successfully
52 parsed, the result is an error.
53
54 @par Value Type
55 @code
56 using value_type = typename Rule::value_type;
57 @endcode
58
59 @par Example
60 Rules are used with the function @ref parse.
61 @code
62 system::result< decode_view > rv = parse( "Program%20Files",
63 not_empty_rule( pct_encoded_rule( unreserved_chars ) ) );
64 @endcode
65
66 @param r The rule to match
67 @return The adapted rule
68
69 @see
70 @ref parse,
71 @ref pct_encoded_rule,
72 @ref unreserved_chars.
73 */
74 template<BOOST_URL_CONSTRAINT(Rule) R>
75 auto
76 constexpr
77 1 not_empty_rule(
78 R const& r) ->
79 implementation_defined::not_empty_rule_t<R>
80 {
81 // If you get a compile error here it
82 // means that your rule does not meet
83 // the type requirements. Please check
84 // the documentation.
85 static_assert(
86 is_rule<R>::value,
87 "Rule requirements not met");
88
89 1 return { r };
90 }
91
92 } // grammar
93 } // urls
94 } // boost
95
96 #include <boost/url/grammar/impl/not_empty_rule.hpp>
97
98 #endif
99