28 const char** error_code =
nullptr)
30 std::string accepted_versions_suffix =
"The supported api-versions are: ";
32 for (
const auto& p : api_version_strings)
34 if (p.first < min_accepted)
41 accepted_versions_suffix += p.second;
46 accepted_versions_suffix += fmt::format(
", {}", p.second);
50 const auto param_name =
"api-version";
51 const auto parsed_query =
52 http::parse_query(ctx.
rpc_ctx->get_request_query());
53 const auto qit = parsed_query.find(param_name);
54 if (qit == parsed_query.end())
57 HTTP_STATUS_BAD_REQUEST,
58 ccf::errors::MissingApiVersionParameter,
60 "The api-version query parameter (?{}=) is required for all "
63 accepted_versions_suffix));
64 if (error_code !=
nullptr)
66 *error_code = ccf::errors::MissingApiVersionParameter;
71 const auto it = std::find_if(
72 std::begin(api_version_strings),
73 std::end(api_version_strings),
74 [&qit](
const auto& p) {
return p.second == qit->second; });
75 if (it == std::end(api_version_strings) || it->first < min_accepted)
77 auto message = fmt::format(
78 "Unsupported api-version '{}'. {}",
80 accepted_versions_suffix);
82 HTTP_STATUS_BAD_REQUEST,
83 ccf::errors::UnsupportedApiVersionValue,
85 if (error_code !=
nullptr)
87 *error_code = ccf::errors::UnsupportedApiVersionValue;