11 #include <restinio/impl/include_fmtlib.hpp> 13 #include <restinio/exception.hpp> 14 #include <restinio/utils/percent_encoding.hpp> 18 #include <unordered_map> 29 const char * result =
static_cast<
const char * >(
30 std::memchr( from, chr,
static_cast<std::size_t>(to - from) ) );
32 return result ? result : to;
42 class query_string_params_t
final 45 using parameters_container_t = std::vector< std::pair< string_view_t, string_view_t > >;
50 std::unique_ptr<
char[] > data_buffer,
51 parameters_container_t parameters )
59 std::unique_ptr<
char[] > data_buffer,
60 std::optional< string_view_t > tag )
66 query_string_params_t &
operator = ( query_string_params_t && ) =
default;
69 query_string_params_t &
operator = (
const query_string_params_t & ) =
delete;
75 return find_parameter_with_check( key ).second;
80 has( string_view_t key )
const noexcept 82 return m_parameters.end() != find_parameter( key );
90 const auto it = find_parameter( key );
92 return m_parameters.end() != it ?
93 std::optional< string_view_t >{ it->second } :
94 std::optional< string_view_t >{ std::nullopt };
98 auto size()
const noexcept {
return m_parameters.size(); }
102 bool empty()
const noexcept {
return m_parameters.empty(); }
109 return m_parameters.begin();
115 return m_parameters.end();
131 auto tag()
const noexcept {
return m_tag; }
139 m_parameters.begin(),
142 return key == p.first;
149 auto it = find_parameter( key );
151 if( m_parameters.end() == it )
155 RESTINIO_FMT_FORMAT_STRING(
156 "unable to find parameter \"{}\"" ),
157 std::string{ key.data(), key.size() } ) };
173 template <
typename Value_Type >
175 get(
const query_string_params_t & params, string_view_t key )
202 return where.find_first_of(
"&;", start_from );
222 return where.find_first_of(
'&', start_from );
348 utils::unescape_percent_encoding_failure_t && failure )
396 template<
typename Parse_Traits >
438 "invalid format of key-value pairs in query_string, " 439 "no '=' symbol starting from position {}" ),
519 query_string_params_t
522 string_view_t original_query_string )
static string_view_t::size_type find_next_separator(string_view_t where, string_view_t::size_type start_from) noexcept
auto tag() const noexcept
Get the tag (web beacon) part.
Traits for parsing a query string in a very relaxed mode.
parameters_container_t::const_iterator find_parameter(string_view_t key) const noexcept
const std::string & description() const noexcept
Get a reference to the description of the failure.
Helper class to be reused in implementation of query-string parsing traits.
parameters_container_t::const_reference find_parameter_with_check(string_view_t key) const
query_string_params_t & operator=(const query_string_params_t &)=delete
std::unique_ptr< char[] > m_data_buffer
Shared buffer for string_view of named parameterts names.
parse_query_failure_t(std::string description)
std::string m_description
Description of a failure.
static string_view_t::size_type find_next_separator(string_view_t where, string_view_t::size_type start_from) noexcept
parameters_container_t m_parameters
query_string_params_t(const query_string_params_t &)=delete
std::enable_if< std::is_same< Parameter_Container, query_string_params_t >::value||std::is_same< Parameter_Container, router::route_params_t >::value, std::optional< Value_Type > >::type opt_value(const Parameter_Container ¶ms, string_view_t key)
Gets the value of a parameter specified by key wrapped in std::optional<Value_Type> if parameter exis...
parameters_container_t::const_iterator begin() const noexcept
auto size() const noexcept
Get the size of parameters.
bool empty() const noexcept
Is there any parameters?
std::optional< string_view_t > get_param(string_view_t key) const noexcept
Get the value of a parameter if it exists.
query_string_params_t parse_query(string_view_t original_query_string)
Parse query key-value parts.
bool has(string_view_t key) const noexcept
Check parameter.
const char * modified_memchr(int chr, const char *from, const char *to)
Traits for the default RESTinio parser for query string.
Value_Type get(const query_string_params_t ¶ms, string_view_t key)
Cast query string parameter to a given type.
query_string_params_t(query_string_params_t &&)=default
string_view_t operator[](string_view_t key) const
Get parameter.
query_string_params_t(std::unique_ptr< char[] > data_buffer, std::optional< string_view_t > tag)
Constructor for the case when query string contains only tag (web beacon).
parse_query_failure_t(utils::unescape_percent_encoding_failure_t &&failure)
Traits for parsing a query string in JavaScript-compatible mode.
Type that indicates a failure of an attempt of query-string parsing.
query_string_params_t & operator=(query_string_params_t &&)=default
std::optional< string_view_t > m_tag
Tag (or web beacon) part.
parameters_container_t::const_iterator end() const noexcept
std::string giveout_description() noexcept
Get out the value of the description of the failure.
Helper class to be reused in implementation of query-string parsing traits.
expected_t< query_string_params_t, parse_query_failure_t > try_parse_query(string_view_t original_query_string)
Helper function for parsing query string.