RESTinio
pct_encoded_symbols.hpp
Go to the documentation of this file.
1 /*
2  * RESTinio
3  */
4 
5 /*!
6  * @file
7  * @brief Stuff related to percent-encoded symbols.
8  *
9  * @since v.0.6.9
10  */
11 
12 #pragma once
13 
14 #include <restinio/helpers/http_field_parsers/basics.hpp>
15 
16 namespace restinio
17 {
18 
19 namespace http_field_parsers
20 {
21 
22 namespace details
23 {
24 
25 //
26 // pct_encoded_result_type_t
27 //
28 /*!
29  * @brief A type for representing extraction of percent-encoded char
30  * from the input stream.
31  *
32  * Exactly three symbols are extracted: `% HEXDIGIT HEXDIGIT`
33  *
34  * @note
35  * Moved into restinio::http_field_parsers::details namespace in v.0.6.9.
36  *
37  * @since v.0.6.1
38  */
39 using pct_encoded_result_type_t = std::array< char, 3 >;
40 
41 //
42 // pct_encoded_symbols_producer
43 //
44 /*!
45  * @brief A producer that extract a sequence of symbols represented
46  * a percent-encoded character.
47  *
48  * This producer returns instances of pct_encoded_result_type_t.
49  *
50  * @note
51  * Moved into restinio::http_field_parsers::details namespace in v.0.6.9.
52  *
53  * @since v.0.6.1
54  */
56 inline auto
58 {
60  symbol_p( '%' ) >> to_container(),
61  hexdigit_p() >> to_container(),
63  );
64 }
65 
66 //
67 // pct_encoded_symbols_consumer_t
68 //
69 /*!
70  * @brief A special consumer that inserts an extracted sequence
71  * of symbols into the result string.
72  *
73  * @note
74  * Moved into restinio::http_field_parsers::details namespace in v.0.6.9.
75  *
76  * @since v.0.6.1
77  */
80 {
81  void
82  consume( std::string & to, pct_encoded_result_type_t && from ) const
83  {
84  to.append( &from[0], from.size() );
85  }
86 };
87 
88 } /* namespace details */
89 
90 } /* namespace http_field_parsers */
91 
92 } /* namespace restinio */
RESTINIO_NODISCARD auto pct_encoded_symbols_p()
A producer that extract a sequence of symbols represented a percent-encoded character.
RESTINIO_NODISCARD auto try_parse_field(const generic_request_t< Extra_Data > &req, http_field_t field_id, string_view_t default_value=string_view_t{})
A helper function for extraction and parsing a value of HTTP-field.
A special consumer that inserts an extracted sequence of symbols into the result string.
void consume(std::string &to, pct_encoded_result_type_t &&from) const
std::enable_if< std::is_same< Parameter_Container, query_string_params_t >::value||std::is_same< Parameter_Container, router::route_params_t >::value, optional_t< Value_Type > >::type opt_value(const Parameter_Container &params, string_view_t key)
Gets the value of a parameter specified by key wrapped in optional_t<Value_Type> if parameter exists ...
Definition: value_or.hpp:64