From ccc9a9b3f49b632c5376e76892b47c31a4d0a2e2 Mon Sep 17 00:00:00 2001 From: hyperxor Date: Tue, 25 Feb 2020 02:30:34 +0300 Subject: [PATCH] Remove code duplication in converting params to query --- httplib.h | 30 ++++++++++++++++-------------- test/test.cc | 15 +++++++++++++++ 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/httplib.h b/httplib.h index 9ce4d86..d2b0bf4 100644 --- a/httplib.h +++ b/httplib.h @@ -2072,6 +2072,19 @@ inline std::string decode_url(const std::string &s) { return result; } +inline std::string params_to_query_str(const Params ¶ms) { + std::string query; + + for (auto it = params.begin(); it != params.end(); ++it) { + if (it != params.begin()) { query += "&"; } + query += it->first; + query += "="; + query += detail::encode_url(it->second); + } + + return query; +} + inline void parse_query_text(const std::string &s, Params ¶ms) { split(&s[0], &s[s.size()], '&', [&](const char *b, const char *e) { std::string key; @@ -4112,15 +4125,10 @@ Client::Post(const char *path, const Headers &headers, size_t content_length, content_type); } + inline std::shared_ptr Client::Post(const char *path, const Headers &headers, const Params ¶ms) { - std::string query; - for (auto it = params.begin(); it != params.end(); ++it) { - if (it != params.begin()) { query += "&"; } - query += it->first; - query += "="; - query += detail::encode_url(it->second); - } + std::string query = detail::params_to_query_str(params); return Post(path, headers, query, "application/x-www-form-urlencoded"); } @@ -4193,13 +4201,7 @@ inline std::shared_ptr Client::Put(const char *path, inline std::shared_ptr Client::Put(const char *path, const Headers &headers, const Params ¶ms) { - std::string query; - for (auto it = params.begin(); it != params.end(); ++it) { - if (it != params.begin()) { query += "&"; } - query += it->first; - query += "="; - query += detail::encode_url(it->second); - } + std::string query = detail::params_to_query_str(params); return Put(path, headers, query, "application/x-www-form-urlencoded"); } diff --git a/test/test.cc b/test/test.cc index 9931e17..5d06a02 100644 --- a/test/test.cc +++ b/test/test.cc @@ -77,6 +77,21 @@ TEST(ParseQueryTest, ParseQueryString) { EXPECT_EQ("val3", dic.find("key3")->second); } +TEST(ParamsToQueryTest, ConvertParamsToQuery) { + Params dic; + + EXPECT_EQ(detail::params_to_query_str(dic), ""); + + dic.emplace("key1", "val1"); + + EXPECT_EQ(detail::params_to_query_str(dic), "key1=val1"); + + dic.emplace("key2", "val2"); + dic.emplace("key3", "val3"); + + EXPECT_EQ(detail::params_to_query_str(dic), "key1=val1&key2=val2&key3=val3"); +} + TEST(GetHeaderValueTest, DefaultValue) { Headers headers = {{"Dummy", "Dummy"}}; auto val = detail::get_header_value(headers, "Content-Type", 0, "text/plain");