1 // Copyright 2019 Google LLC
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #include "google/cloud/storage/internal/hybrid_client.h"
16 
17 namespace google {
18 namespace cloud {
19 namespace storage {
20 inline namespace STORAGE_CLIENT_NS {
21 namespace internal {
22 
HybridClient(ClientOptions options)23 HybridClient::HybridClient(ClientOptions options)
24     : grpc_(std::make_shared<GrpcClient>(options)),
25       curl_(CurlClient::Create(std::move(options))) {}
26 
client_options() const27 ClientOptions const& HybridClient::client_options() const {
28   return curl_->client_options();
29 }
30 
ListBuckets(ListBucketsRequest const & request)31 StatusOr<ListBucketsResponse> HybridClient::ListBuckets(
32     ListBucketsRequest const& request) {
33   return curl_->ListBuckets(request);
34 }
35 
CreateBucket(CreateBucketRequest const & request)36 StatusOr<BucketMetadata> HybridClient::CreateBucket(
37     CreateBucketRequest const& request) {
38   return curl_->CreateBucket(request);
39 }
40 
GetBucketMetadata(GetBucketMetadataRequest const & request)41 StatusOr<BucketMetadata> HybridClient::GetBucketMetadata(
42     GetBucketMetadataRequest const& request) {
43   return curl_->GetBucketMetadata(request);
44 }
45 
DeleteBucket(DeleteBucketRequest const & request)46 StatusOr<EmptyResponse> HybridClient::DeleteBucket(
47     DeleteBucketRequest const& request) {
48   return curl_->DeleteBucket(request);
49 }
50 
UpdateBucket(UpdateBucketRequest const & request)51 StatusOr<BucketMetadata> HybridClient::UpdateBucket(
52     UpdateBucketRequest const& request) {
53   return curl_->UpdateBucket(request);
54 }
55 
PatchBucket(PatchBucketRequest const & request)56 StatusOr<BucketMetadata> HybridClient::PatchBucket(
57     PatchBucketRequest const& request) {
58   return curl_->PatchBucket(request);
59 }
60 
GetBucketIamPolicy(GetBucketIamPolicyRequest const & request)61 StatusOr<IamPolicy> HybridClient::GetBucketIamPolicy(
62     GetBucketIamPolicyRequest const& request) {
63   return curl_->GetBucketIamPolicy(request);
64 }
65 
GetNativeBucketIamPolicy(GetBucketIamPolicyRequest const & request)66 StatusOr<NativeIamPolicy> HybridClient::GetNativeBucketIamPolicy(
67     GetBucketIamPolicyRequest const& request) {
68   return curl_->GetNativeBucketIamPolicy(request);
69 }
70 
SetBucketIamPolicy(SetBucketIamPolicyRequest const & request)71 StatusOr<IamPolicy> HybridClient::SetBucketIamPolicy(
72     SetBucketIamPolicyRequest const& request) {
73   return curl_->SetBucketIamPolicy(request);
74 }
75 
SetNativeBucketIamPolicy(SetNativeBucketIamPolicyRequest const & request)76 StatusOr<NativeIamPolicy> HybridClient::SetNativeBucketIamPolicy(
77     SetNativeBucketIamPolicyRequest const& request) {
78   return curl_->SetNativeBucketIamPolicy(request);
79 }
80 
81 StatusOr<TestBucketIamPermissionsResponse>
TestBucketIamPermissions(TestBucketIamPermissionsRequest const & request)82 HybridClient::TestBucketIamPermissions(
83     TestBucketIamPermissionsRequest const& request) {
84   return curl_->TestBucketIamPermissions(request);
85 }
86 
LockBucketRetentionPolicy(LockBucketRetentionPolicyRequest const & request)87 StatusOr<BucketMetadata> HybridClient::LockBucketRetentionPolicy(
88     LockBucketRetentionPolicyRequest const& request) {
89   return curl_->LockBucketRetentionPolicy(request);
90 }
91 
InsertObjectMedia(InsertObjectMediaRequest const & request)92 StatusOr<ObjectMetadata> HybridClient::InsertObjectMedia(
93     InsertObjectMediaRequest const& request) {
94   return grpc_->InsertObjectMedia(request);
95 }
96 
CopyObject(CopyObjectRequest const & request)97 StatusOr<ObjectMetadata> HybridClient::CopyObject(
98     CopyObjectRequest const& request) {
99   return curl_->CopyObject(request);
100 }
101 
GetObjectMetadata(GetObjectMetadataRequest const & request)102 StatusOr<ObjectMetadata> HybridClient::GetObjectMetadata(
103     GetObjectMetadataRequest const& request) {
104   return curl_->GetObjectMetadata(request);
105 }
106 
ReadObject(ReadObjectRangeRequest const & request)107 StatusOr<std::unique_ptr<ObjectReadSource>> HybridClient::ReadObject(
108     ReadObjectRangeRequest const& request) {
109   return grpc_->ReadObject(request);
110 }
111 
ListObjects(ListObjectsRequest const & request)112 StatusOr<ListObjectsResponse> HybridClient::ListObjects(
113     ListObjectsRequest const& request) {
114   return curl_->ListObjects(request);
115 }
116 
DeleteObject(DeleteObjectRequest const & request)117 StatusOr<EmptyResponse> HybridClient::DeleteObject(
118     DeleteObjectRequest const& request) {
119   return curl_->DeleteObject(request);
120 }
121 
UpdateObject(UpdateObjectRequest const & request)122 StatusOr<ObjectMetadata> HybridClient::UpdateObject(
123     UpdateObjectRequest const& request) {
124   return curl_->UpdateObject(request);
125 }
126 
PatchObject(PatchObjectRequest const & request)127 StatusOr<ObjectMetadata> HybridClient::PatchObject(
128     PatchObjectRequest const& request) {
129   return curl_->PatchObject(request);
130 }
131 
ComposeObject(ComposeObjectRequest const & request)132 StatusOr<ObjectMetadata> HybridClient::ComposeObject(
133     ComposeObjectRequest const& request) {
134   return curl_->ComposeObject(request);
135 }
136 
RewriteObject(RewriteObjectRequest const & request)137 StatusOr<RewriteObjectResponse> HybridClient::RewriteObject(
138     RewriteObjectRequest const& request) {
139   return curl_->RewriteObject(request);
140 }
141 
142 StatusOr<std::unique_ptr<ResumableUploadSession>>
CreateResumableSession(ResumableUploadRequest const & request)143 HybridClient::CreateResumableSession(ResumableUploadRequest const& request) {
144   return grpc_->CreateResumableSession(request);
145 }
146 
147 StatusOr<std::unique_ptr<ResumableUploadSession>>
RestoreResumableSession(std::string const & upload_id)148 HybridClient::RestoreResumableSession(std::string const& upload_id) {
149   return grpc_->RestoreResumableSession(upload_id);
150 }
151 
DeleteResumableUpload(DeleteResumableUploadRequest const & request)152 StatusOr<EmptyResponse> HybridClient::DeleteResumableUpload(
153     DeleteResumableUploadRequest const& request) {
154   return curl_->DeleteResumableUpload(request);
155 }
156 
ListBucketAcl(ListBucketAclRequest const & request)157 StatusOr<ListBucketAclResponse> HybridClient::ListBucketAcl(
158     ListBucketAclRequest const& request) {
159   return curl_->ListBucketAcl(request);
160 }
161 
CreateBucketAcl(CreateBucketAclRequest const & request)162 StatusOr<BucketAccessControl> HybridClient::CreateBucketAcl(
163     CreateBucketAclRequest const& request) {
164   return curl_->CreateBucketAcl(request);
165 }
166 
DeleteBucketAcl(DeleteBucketAclRequest const & request)167 StatusOr<EmptyResponse> HybridClient::DeleteBucketAcl(
168     DeleteBucketAclRequest const& request) {
169   return curl_->DeleteBucketAcl(request);
170 }
171 
GetBucketAcl(GetBucketAclRequest const & request)172 StatusOr<BucketAccessControl> HybridClient::GetBucketAcl(
173     GetBucketAclRequest const& request) {
174   return curl_->GetBucketAcl(request);
175 }
176 
UpdateBucketAcl(UpdateBucketAclRequest const & request)177 StatusOr<BucketAccessControl> HybridClient::UpdateBucketAcl(
178     UpdateBucketAclRequest const& request) {
179   return curl_->UpdateBucketAcl(request);
180 }
181 
PatchBucketAcl(PatchBucketAclRequest const & request)182 StatusOr<BucketAccessControl> HybridClient::PatchBucketAcl(
183     PatchBucketAclRequest const& request) {
184   return curl_->PatchBucketAcl(request);
185 }
186 
ListObjectAcl(ListObjectAclRequest const & request)187 StatusOr<ListObjectAclResponse> HybridClient::ListObjectAcl(
188     ListObjectAclRequest const& request) {
189   return curl_->ListObjectAcl(request);
190 }
191 
CreateObjectAcl(CreateObjectAclRequest const & request)192 StatusOr<ObjectAccessControl> HybridClient::CreateObjectAcl(
193     CreateObjectAclRequest const& request) {
194   return curl_->CreateObjectAcl(request);
195 }
196 
DeleteObjectAcl(DeleteObjectAclRequest const & request)197 StatusOr<EmptyResponse> HybridClient::DeleteObjectAcl(
198     DeleteObjectAclRequest const& request) {
199   return curl_->DeleteObjectAcl(request);
200 }
201 
GetObjectAcl(GetObjectAclRequest const & request)202 StatusOr<ObjectAccessControl> HybridClient::GetObjectAcl(
203     GetObjectAclRequest const& request) {
204   return curl_->GetObjectAcl(request);
205 }
206 
UpdateObjectAcl(UpdateObjectAclRequest const & request)207 StatusOr<ObjectAccessControl> HybridClient::UpdateObjectAcl(
208     UpdateObjectAclRequest const& request) {
209   return curl_->UpdateObjectAcl(request);
210 }
211 
PatchObjectAcl(PatchObjectAclRequest const & request)212 StatusOr<ObjectAccessControl> HybridClient::PatchObjectAcl(
213     PatchObjectAclRequest const& request) {
214   return curl_->PatchObjectAcl(request);
215 }
216 
ListDefaultObjectAcl(ListDefaultObjectAclRequest const & request)217 StatusOr<ListDefaultObjectAclResponse> HybridClient::ListDefaultObjectAcl(
218     ListDefaultObjectAclRequest const& request) {
219   return curl_->ListDefaultObjectAcl(request);
220 }
221 
CreateDefaultObjectAcl(CreateDefaultObjectAclRequest const & request)222 StatusOr<ObjectAccessControl> HybridClient::CreateDefaultObjectAcl(
223     CreateDefaultObjectAclRequest const& request) {
224   return curl_->CreateDefaultObjectAcl(request);
225 }
226 
DeleteDefaultObjectAcl(DeleteDefaultObjectAclRequest const & request)227 StatusOr<EmptyResponse> HybridClient::DeleteDefaultObjectAcl(
228     DeleteDefaultObjectAclRequest const& request) {
229   return curl_->DeleteDefaultObjectAcl(request);
230 }
231 
GetDefaultObjectAcl(GetDefaultObjectAclRequest const & request)232 StatusOr<ObjectAccessControl> HybridClient::GetDefaultObjectAcl(
233     GetDefaultObjectAclRequest const& request) {
234   return curl_->GetDefaultObjectAcl(request);
235 }
236 
UpdateDefaultObjectAcl(UpdateDefaultObjectAclRequest const & request)237 StatusOr<ObjectAccessControl> HybridClient::UpdateDefaultObjectAcl(
238     UpdateDefaultObjectAclRequest const& request) {
239   return curl_->UpdateDefaultObjectAcl(request);
240 }
241 
PatchDefaultObjectAcl(PatchDefaultObjectAclRequest const & request)242 StatusOr<ObjectAccessControl> HybridClient::PatchDefaultObjectAcl(
243     PatchDefaultObjectAclRequest const& request) {
244   return curl_->PatchDefaultObjectAcl(request);
245 }
246 
GetServiceAccount(GetProjectServiceAccountRequest const & request)247 StatusOr<ServiceAccount> HybridClient::GetServiceAccount(
248     GetProjectServiceAccountRequest const& request) {
249   return curl_->GetServiceAccount(request);
250 }
251 
ListHmacKeys(ListHmacKeysRequest const & request)252 StatusOr<ListHmacKeysResponse> HybridClient::ListHmacKeys(
253     ListHmacKeysRequest const& request) {
254   return curl_->ListHmacKeys(request);
255 }
256 
CreateHmacKey(CreateHmacKeyRequest const & request)257 StatusOr<CreateHmacKeyResponse> HybridClient::CreateHmacKey(
258     CreateHmacKeyRequest const& request) {
259   return curl_->CreateHmacKey(request);
260 }
261 
DeleteHmacKey(DeleteHmacKeyRequest const & request)262 StatusOr<EmptyResponse> HybridClient::DeleteHmacKey(
263     DeleteHmacKeyRequest const& request) {
264   return curl_->DeleteHmacKey(request);
265 }
266 
GetHmacKey(GetHmacKeyRequest const & request)267 StatusOr<HmacKeyMetadata> HybridClient::GetHmacKey(
268     GetHmacKeyRequest const& request) {
269   return curl_->GetHmacKey(request);
270 }
271 
UpdateHmacKey(UpdateHmacKeyRequest const & request)272 StatusOr<HmacKeyMetadata> HybridClient::UpdateHmacKey(
273     UpdateHmacKeyRequest const& request) {
274   return curl_->UpdateHmacKey(request);
275 }
276 
SignBlob(SignBlobRequest const & request)277 StatusOr<SignBlobResponse> HybridClient::SignBlob(
278     SignBlobRequest const& request) {
279   return curl_->SignBlob(request);
280 }
281 
ListNotifications(ListNotificationsRequest const & request)282 StatusOr<ListNotificationsResponse> HybridClient::ListNotifications(
283     ListNotificationsRequest const& request) {
284   return curl_->ListNotifications(request);
285 }
286 
CreateNotification(CreateNotificationRequest const & request)287 StatusOr<NotificationMetadata> HybridClient::CreateNotification(
288     CreateNotificationRequest const& request) {
289   return curl_->CreateNotification(request);
290 }
291 
GetNotification(GetNotificationRequest const & request)292 StatusOr<NotificationMetadata> HybridClient::GetNotification(
293     GetNotificationRequest const& request) {
294   return curl_->GetNotification(request);
295 }
296 
DeleteNotification(DeleteNotificationRequest const & request)297 StatusOr<EmptyResponse> HybridClient::DeleteNotification(
298     DeleteNotificationRequest const& request) {
299   return curl_->DeleteNotification(request);
300 }
301 
302 }  // namespace internal
303 }  // namespace STORAGE_CLIENT_NS
304 }  // namespace storage
305 }  // namespace cloud
306 }  // namespace google
307