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_same_v<T, bool>)
61 if (param_val ==
"true")
66 else if (param_val ==
"false")
73 error_reason = fmt::format(
74 "Unable to parse value '{}' as bool in parameter '{}'",
80 else if constexpr (std::is_integral_v<T>)
83 std::from_chars(param_val.begin(), param_val.end(), val);
84 if (ec != std::errc() || p != param_val.end())
86 error_reason = fmt::format(
87 "Unable to parse value '{}' in parameter '{}'", param_val, param_key);
100 template <
typename T>
101 static std::optional<T> get_query_value_opt(
103 const std::string_view& param_key,
104 std::string& error_reason)
107 if (get_query_value(pq, param_key, val, error_reason))
Definition http_accept.h:13
std::multimap< std::string_view, std::string_view > ParsedQuery
Definition http_query.h:20