20 using ParsedQuery = std::multimap<std::string_view, std::string_view>;
22 static ParsedQuery parse_query(
const std::string_view& query)
25 const auto params = ccf::nonstd::split(query,
"&");
26 for (
const auto& param : params)
30 const auto& [key, value] = ccf::nonstd::split_1(param,
"=");
31 parsed.emplace(key, value);
38 static bool get_query_value(
40 const std::string_view& param_key,
42 std::string& error_reason)
44 const auto it = pq.find(param_key);
48 error_reason = fmt::format(
"Missing query parameter '{}'", param_key);
52 const std::string_view& param_val = it->second;
54 if constexpr (std::is_same_v<T, std::string>)
59 else if constexpr (std::is_integral_v<T>)
62 std::from_chars(param_val.begin(), param_val.end(), val);
63 if (ec != std::errc() || p != param_val.end())
65 error_reason = fmt::format(
66 "Unable to parse value '{}' in parameter '{}'", param_val, param_key);
80 static std::optional<T> get_query_value_opt(
82 const std::string_view& param_key,
83 std::string& error_reason)
86 if (get_query_value(pq, param_key, val, error_reason))
Definition http_configuration.h:11
std::multimap< std::string_view, std::string_view > ParsedQuery
Definition http_query.h:20