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")
67 if (param_val ==
"false")
73 error_reason = fmt::format(
74 "Unable to parse value '{}' as bool in parameter '{}'",
79 else if constexpr (std::is_integral_v<T>)
82 std::from_chars(param_val.begin(), param_val.end(), val);
83 if (ec != std::errc() || p != param_val.end())
85 error_reason = fmt::format(
86 "Unable to parse value '{}' in parameter '{}'", param_val, param_key);
100 static std::optional<T> get_query_value_opt(
102 const std::string_view& param_key,
103 std::string& error_reason)
106 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