Header entries should be case insensitive
This commit is contained in:
parent
9dffbf811c
commit
d1573c6218
1 changed files with 16 additions and 6 deletions
|
@ -21,6 +21,8 @@
|
||||||
#include "duckhandy/int_conv.hpp"
|
#include "duckhandy/int_conv.hpp"
|
||||||
#include "api_nap_exception.hpp"
|
#include "api_nap_exception.hpp"
|
||||||
#include <optional>
|
#include <optional>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <cctype>
|
||||||
|
|
||||||
namespace sjd = simdjson::dom;
|
namespace sjd = simdjson::dom;
|
||||||
namespace sj = simdjson;
|
namespace sj = simdjson;
|
||||||
|
@ -28,22 +30,30 @@ namespace sj = simdjson;
|
||||||
namespace oro {
|
namespace oro {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
bool equal (std::string_view a, std::string_view b) {
|
||||||
|
return a.size() == b.size() and std::equal(
|
||||||
|
a.begin(), a.end(),
|
||||||
|
b.begin(),
|
||||||
|
[](auto c1, auto c2) {return std::tolower(c1) == std::tolower(c2); }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
Header to_header (const nap::HttpResponse& resp) {
|
Header to_header (const nap::HttpResponse& resp) {
|
||||||
using dhandy::int_conv;
|
using dhandy::int_conv;
|
||||||
|
|
||||||
Header ret;
|
Header ret;
|
||||||
for (const auto& entry : resp.header) {
|
for (const auto& entry : resp.header) {
|
||||||
if (entry.first == "Date")
|
if (equal(entry.first, "Date"))
|
||||||
ret.date = from_header_timestamp(std::string(entry.second));
|
ret.date = from_header_timestamp(std::string(entry.second));
|
||||||
else if (entry.first == "X-RateLimit-Limit")
|
else if (equal(entry.first, "X-RateLimit-Limit"))
|
||||||
ret.rate_limit = int_conv<decltype(ret.rate_limit)>(entry.second);
|
ret.rate_limit = int_conv<decltype(ret.rate_limit)>(entry.second);
|
||||||
else if (entry.first == "X-RateLimit-Remaining")
|
else if (equal(entry.first, "X-RateLimit-Remaining"))
|
||||||
ret.rate_limit_remaining = int_conv<decltype(ret.rate_limit_remaining)>(entry.second);
|
ret.rate_limit_remaining = int_conv<decltype(ret.rate_limit_remaining)>(entry.second);
|
||||||
else if (entry.first == "X-RateLimit-Reset")
|
else if (equal(entry.first, "X-RateLimit-Reset"))
|
||||||
ret.rate_limit_reset = int_conv<decltype(ret.rate_limit_reset)>(entry.second);
|
ret.rate_limit_reset = int_conv<decltype(ret.rate_limit_reset)>(entry.second);
|
||||||
else if (entry.first == "Retry-After")
|
else if (equal(entry.first, "Retry-After"))
|
||||||
ret.retry_after = int_conv<decltype(ret.retry_after)>(entry.second);
|
ret.retry_after = int_conv<decltype(ret.retry_after)>(entry.second);
|
||||||
else if (entry.first == "Server")
|
else if (equal(entry.first, "Server"))
|
||||||
ret.server = std::string(entry.second);
|
ret.server = std::string(entry.second);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Loading…
Reference in a new issue