18#include <unordered_map>
29 const char *
result =
static_cast< const char *
>(
30 std::memchr(
from,
chr,
static_cast<std::size_t
>(
to -
from) ) );
60 std::optional< string_view_t >
tag )
87 std::optional< string_view_t >
93 std::optional< string_view_t >{
it->second } :
94 std::optional< string_view_t >{ std::nullopt };
106 parameters_container_t::const_iterator
112 parameters_container_t::const_iterator
134 parameters_container_t::const_iterator
142 return key == p.first;
146 parameters_container_t::const_reference
156 "unable to find parameter \"{}\"" ),
157 std::string{
key.data(),
key.size() } ) };
169 std::optional< string_view_t >
m_tag;
173template <
typename Value_Type >
177 return std::get< Value_Type >( params[
key ] );
180namespace parse_query_traits
197 static string_view_t::size_type
200 string_view_t::size_type
start_from )
noexcept
217 static string_view_t::size_type
220 string_view_t::size_type
start_from )
noexcept
396template<
typename Parse_Traits >
421 string_view_t::size_type
pos{ 0 };
428 if( string_view_t::npos ==
eq_pos )
438 "invalid format of key-value pairs in query_string, "
439 "no '=' symbol starting from position {}" ),
446 utils::try_inplace_unescape_percent_encoding< Parse_Traits >(
469 utils::try_inplace_unescape_percent_encoding< Parse_Traits >(
478 utils::try_inplace_unescape_percent_encoding< Parse_Traits >(
486 parameters.emplace_back(
496 std::move( parameters )
517template<
typename Parse_Traits = parse_query_traits::restinio_defaults >
526 throw exception_t{ std::move(
r.error().giveout_description()) };
528 return std::move(*
r);
Exception class for all exceptions thrown by RESTinio.
Type that indicates a failure of an attempt of query-string parsing.
std::string giveout_description() noexcept
Get out the value of the description of the failure.
const std::string & description() const noexcept
Get a reference to the description of the failure.
std::string m_description
Description of a failure.
parse_query_failure_t(std::string description)
parse_query_failure_t(utils::unescape_percent_encoding_failure_t &&failure)
Parameters container for query strings parameters.
std::unique_ptr< char[] > m_data_buffer
Shared buffer for string_view of named parameterts names.
query_string_params_t(query_string_params_t &&)=default
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).
auto tag() const noexcept
Get the tag (web beacon) part.
bool empty() const noexcept
Is there any parameters?
auto size() const noexcept
Get the size of parameters.
parameters_container_t::const_iterator begin() const noexcept
query_string_params_t & operator=(query_string_params_t &&)=default
string_view_t operator[](string_view_t key) const
Get parameter.
parameters_container_t m_parameters
std::vector< std::pair< string_view_t, string_view_t > > parameters_container_t
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(std::unique_ptr< char[] > data_buffer, parameters_container_t parameters)
Constructor for the case when query string empty of contains a set of key-value pairs.
parameters_container_t::const_iterator find_parameter(string_view_t key) const noexcept
parameters_container_t::const_reference find_parameter_with_check(string_view_t key) const
parameters_container_t::const_iterator end() const noexcept
bool has(string_view_t key) const noexcept
Check parameter.
query_string_params_t(const query_string_params_t &)=delete
std::optional< string_view_t > m_tag
Tag (or web beacon) part.
Type that indicates a failure of unescaping of percent-encoded symbols.
A special wrapper around fmtlib include files.
#define RESTINIO_FMT_FORMAT_STRING(s)
const char * modified_memchr(int chr, const char *from, const char *to)
query_string_params_t parse_query(string_view_t original_query_string)
Parse query key-value parts.
run_on_this_thread_settings_t< Traits > on_this_thread()
A special marker for the case when http_server must be run on the context of the current thread.
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.
std::string_view string_view_t
Value_Type get(const router::route_params_t ¶ms, string_view_t key)
Cast named parameter value to a given type.
Helper class to be reused in implementation of query-string parsing traits.
static string_view_t::size_type find_next_separator(string_view_t where, string_view_t::size_type start_from) noexcept
Helper class to be reused in implementation of query-string parsing traits.
static string_view_t::size_type find_next_separator(string_view_t where, string_view_t::size_type start_from) noexcept
Traits for parsing a query string in JavaScript-compatible mode.
Traits for parsing a query string in a very relaxed mode.
Traits for the default RESTinio parser for query string.
The traits for escaping and unexcaping symbols in JavaScript-compatible mode.
Traits for escaping and unescaping symbols in a query string in very relaxed mode.
The default traits for escaping and unexcaping symbols in a query string.