Skip to content

Commit 1aff874

Browse files
authored
impl(rest): add AppendPath methods (#8461)
1 parent 44e7fea commit 1aff874

File tree

3 files changed

+33
-10
lines changed

3 files changed

+33
-10
lines changed

google/cloud/internal/rest_request.cc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
// limitations under the License.
1414

1515
#include "google/cloud/internal/rest_request.h"
16+
#include "google/cloud/internal/absl_str_cat_quiet.h"
1617
#include "google/cloud/log.h"
18+
#include "absl/strings/strip.h"
1719
#include <cctype>
1820

1921
namespace google {
@@ -38,6 +40,13 @@ RestRequest& RestRequest::SetPath(std::string path) & {
3840
return *this;
3941
}
4042

43+
RestRequest& RestRequest::AppendPath(std::string path) & {
44+
if (path_.empty()) return SetPath(std::move(path));
45+
path_ = absl::StrCat(absl::StripSuffix(path_, "/"), "/",
46+
absl::StripPrefix(std::move(path), "/"));
47+
return *this;
48+
}
49+
4150
RestRequest& RestRequest::AddHeader(std::string header, std::string value) & {
4251
std::transform(header.begin(), header.end(), header.begin(),
4352
[](unsigned char c) { return std::tolower(c); });

google/cloud/internal/rest_request.h

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,37 +42,40 @@ class RestRequest {
4242
RestRequest(std::string path, HttpParameters parameters);
4343
RestRequest(std::string path, HttpHeaders headers, HttpParameters parameters);
4444

45-
inline std::string const& path() const { return path_; }
46-
inline HttpHeaders const& headers() const { return headers_; }
47-
inline HttpParameters const& parameters() const { return parameters_; }
45+
std::string const& path() const { return path_; }
46+
HttpHeaders const& headers() const { return headers_; }
47+
HttpParameters const& parameters() const { return parameters_; }
4848

4949
RestRequest& SetPath(std::string path) &;
50-
inline RestRequest&& SetPath(std::string path) && {
50+
RestRequest&& SetPath(std::string path) && {
5151
return std::move(SetPath(std::move(path)));
5252
}
5353

54+
RestRequest& AppendPath(std::string path) &;
55+
RestRequest&& AppendPath(std::string path) && {
56+
return std::move(AppendPath(std::move(path)));
57+
}
58+
5459
// Adding a header/value pair that already exists results in the new value
5560
// appended to the list of values for the existing header.
5661
RestRequest& AddHeader(std::string header, std::string value) &;
57-
inline RestRequest&& AddHeader(std::string header, std::string value) && {
62+
RestRequest&& AddHeader(std::string header, std::string value) && {
5863
return std::move(AddHeader(std::move(header), std::move(value)));
5964
}
6065
RestRequest& AddHeader(std::pair<std::string, std::string> header) &;
61-
inline RestRequest&& AddHeader(
62-
std::pair<std::string, std::string> header) && {
66+
RestRequest&& AddHeader(std::pair<std::string, std::string> header) && {
6367
return std::move(AddHeader(std::move(header)));
6468
}
6569

6670
// Adding a duplicate param and or value results in both the new and original
6771
// pairs stored in order of addition.
6872
RestRequest& AddQueryParameter(std::string parameter, std::string value) &;
69-
inline RestRequest&& AddQueryParameter(std::string parameter,
70-
std::string value) && {
73+
RestRequest&& AddQueryParameter(std::string parameter, std::string value) && {
7174
return std::move(AddQueryParameter(std::move(parameter), std::move(value)));
7275
}
7376
RestRequest& AddQueryParameter(
7477
std::pair<std::string, std::string> parameter) &;
75-
inline RestRequest&& AddQueryParameter(
78+
RestRequest&& AddQueryParameter(
7679
std::pair<std::string, std::string> parameter) && {
7780
return std::move(AddQueryParameter(std::move(parameter)));
7881
}

google/cloud/internal/rest_request_test.cc

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,17 @@ TEST_F(RestRequestTest, RvalueBuilder) {
9898
Eq(std::make_pair(std::string("param2"), std::string("value2"))));
9999
}
100100

101+
TEST_F(RestRequestTest, AppendPath) {
102+
auto request = RestRequest().AppendPath("able");
103+
EXPECT_THAT(request.path(), Eq("able"));
104+
request.AppendPath("baker");
105+
EXPECT_THAT(request.path(), Eq("able/baker"));
106+
request.AppendPath("/charlie");
107+
EXPECT_THAT(request.path(), Eq("able/baker/charlie"));
108+
request.AppendPath("delta/").AppendPath("/echo");
109+
EXPECT_THAT(request.path(), Eq("able/baker/charlie/delta/echo"));
110+
}
111+
101112
TEST_F(RestRequestTest, GetHeaderNotFound) {
102113
RestRequest request("foo/bar", headers_);
103114
auto result = request.GetHeader("NotFound");

0 commit comments

Comments
 (0)