12 #include <unordered_map> 14 #include <restinio/impl/include_fmtlib.hpp> 16 #include <restinio/exception.hpp> 17 #include <restinio/utils/percent_encoding.hpp> 18 #include <restinio/optional.hpp> 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 optional_t< 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 optional_t< string_view_t >{ it->second } :
94 optional_t< string_view_t >{ 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 "unable to find parameter \"{}\"",
156 std::string{ key.data(), key.size() } ) };
172 template <
typename Value_Type >
174 get(
const query_string_params_t & params, string_view_t key )
201 return where.find_first_of(
"&;", start_from );
221 return where.find_first_of(
'&', start_from );
347 utils::unescape_percent_encoding_failure_t && failure )
395 template<
typename Parse_Traits >
436 "invalid format of key-value pairs in query_string, " 437 "no '=' symbol starting from position {}",
515 template<
typename Parse_Traits = parse_query_traits::restinio_defaults >
517 query_string_params_t
522 auto r = try_parse_query< Parse_Traits >( original_query_string );
524 throw exception_t{ std::move(r.error().giveout_description()) };
526 return std::move(*r);
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.
optional_t< string_view_t > get_param(string_view_t key) const noexcept
Get the value of a parameter if it exists.
RESTINIO_NODISCARD query_string_params_t parse_query(string_view_t original_query_string)
Parse query key-value parts.
parameters_container_t::const_iterator find_parameter(string_view_t key) const noexcept
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
RESTINIO_NODISCARD std::string giveout_description() noexcept
Get out the value of the description of the failure.
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
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?
bool has(string_view_t key) const noexcept
Check parameter.
query_string_params_t(std::unique_ptr< char[] > data_buffer, optional_t< string_view_t > tag)
Constructor for the case when query string contains only tag (web beacon).
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.
RESTINIO_NODISCARD char to_lower_case(unsigned char ch)
parse_query_failure_t(utils::unescape_percent_encoding_failure_t &&failure)
Traits for parsing a query string in JavaScript-compatible mode.
query_string_params_t & operator=(query_string_params_t &&)=default
parameters_container_t::const_iterator end() const noexcept
Helper class to be reused in implementation of query-string parsing traits.
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 ¶ms, string_view_t key)
Gets the value of a parameter specified by key wrapped in optional_t<Value_Type> if parameter exists ...
optional_t< string_view_t > m_tag
Tag (or web beacon) part.