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 #ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_STORAGE_INTERNAL_HYBRID_CLIENT_H
16 #define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_STORAGE_INTERNAL_HYBRID_CLIENT_H
17 
18 #include "google/cloud/storage/internal/curl_client.h"
19 #include "google/cloud/storage/internal/grpc_client.h"
20 #include "google/cloud/storage/internal/raw_client.h"
21 #include "google/cloud/storage/version.h"
22 
23 namespace google {
24 namespace cloud {
25 namespace storage {
26 inline namespace STORAGE_CLIENT_NS {
27 namespace internal {
28 
29 class HybridClient : public RawClient {
30  public:
31   explicit HybridClient(ClientOptions options);
32   ~HybridClient() override = default;
33 
34   ClientOptions const& client_options() const override;
35 
36   StatusOr<ListBucketsResponse> ListBuckets(
37       ListBucketsRequest const& request) override;
38   StatusOr<BucketMetadata> CreateBucket(
39       CreateBucketRequest const& request) override;
40   StatusOr<BucketMetadata> GetBucketMetadata(
41       GetBucketMetadataRequest const& request) override;
42   StatusOr<EmptyResponse> DeleteBucket(DeleteBucketRequest const&) override;
43   StatusOr<BucketMetadata> UpdateBucket(
44       UpdateBucketRequest const& request) override;
45   StatusOr<BucketMetadata> PatchBucket(
46       PatchBucketRequest const& request) override;
47   StatusOr<IamPolicy> GetBucketIamPolicy(
48       GetBucketIamPolicyRequest const& request) override;
49   StatusOr<NativeIamPolicy> GetNativeBucketIamPolicy(
50       GetBucketIamPolicyRequest const& request) override;
51   StatusOr<IamPolicy> SetBucketIamPolicy(
52       SetBucketIamPolicyRequest const& request) override;
53   StatusOr<NativeIamPolicy> SetNativeBucketIamPolicy(
54       SetNativeBucketIamPolicyRequest const& request) override;
55   StatusOr<TestBucketIamPermissionsResponse> TestBucketIamPermissions(
56       TestBucketIamPermissionsRequest const& request) override;
57   StatusOr<BucketMetadata> LockBucketRetentionPolicy(
58       LockBucketRetentionPolicyRequest const& request) override;
59 
60   StatusOr<ObjectMetadata> InsertObjectMedia(
61       InsertObjectMediaRequest const& request) override;
62   StatusOr<ObjectMetadata> CopyObject(
63       CopyObjectRequest const& request) override;
64   StatusOr<ObjectMetadata> GetObjectMetadata(
65       GetObjectMetadataRequest const& request) override;
66 
67   StatusOr<std::unique_ptr<ObjectReadSource>> ReadObject(
68       ReadObjectRangeRequest const&) override;
69 
70   StatusOr<ListObjectsResponse> ListObjects(ListObjectsRequest const&) override;
71   StatusOr<EmptyResponse> DeleteObject(DeleteObjectRequest const&) override;
72   StatusOr<ObjectMetadata> UpdateObject(
73       UpdateObjectRequest const& request) override;
74   StatusOr<ObjectMetadata> PatchObject(
75       PatchObjectRequest const& request) override;
76   StatusOr<ObjectMetadata> ComposeObject(
77       ComposeObjectRequest const& request) override;
78   StatusOr<RewriteObjectResponse> RewriteObject(
79       RewriteObjectRequest const&) override;
80   StatusOr<std::unique_ptr<ResumableUploadSession>> CreateResumableSession(
81       ResumableUploadRequest const& request) override;
82   StatusOr<std::unique_ptr<ResumableUploadSession>> RestoreResumableSession(
83       std::string const& upload_id) override;
84   StatusOr<EmptyResponse> DeleteResumableUpload(
85       DeleteResumableUploadRequest const& request) override;
86 
87   StatusOr<ListBucketAclResponse> ListBucketAcl(
88       ListBucketAclRequest const& request) override;
89   StatusOr<BucketAccessControl> CreateBucketAcl(
90       CreateBucketAclRequest const&) override;
91   StatusOr<EmptyResponse> DeleteBucketAcl(
92       DeleteBucketAclRequest const&) override;
93   StatusOr<BucketAccessControl> GetBucketAcl(
94       GetBucketAclRequest const&) override;
95   StatusOr<BucketAccessControl> UpdateBucketAcl(
96       UpdateBucketAclRequest const&) override;
97   StatusOr<BucketAccessControl> PatchBucketAcl(
98       PatchBucketAclRequest const&) override;
99 
100   StatusOr<ListObjectAclResponse> ListObjectAcl(
101       ListObjectAclRequest const& request) override;
102   StatusOr<ObjectAccessControl> CreateObjectAcl(
103       CreateObjectAclRequest const&) override;
104   StatusOr<EmptyResponse> DeleteObjectAcl(
105       DeleteObjectAclRequest const&) override;
106   StatusOr<ObjectAccessControl> GetObjectAcl(
107       GetObjectAclRequest const&) override;
108   StatusOr<ObjectAccessControl> UpdateObjectAcl(
109       UpdateObjectAclRequest const&) override;
110   StatusOr<ObjectAccessControl> PatchObjectAcl(
111       PatchObjectAclRequest const&) override;
112 
113   StatusOr<ListDefaultObjectAclResponse> ListDefaultObjectAcl(
114       ListDefaultObjectAclRequest const& request) override;
115   StatusOr<ObjectAccessControl> CreateDefaultObjectAcl(
116       CreateDefaultObjectAclRequest const&) override;
117   StatusOr<EmptyResponse> DeleteDefaultObjectAcl(
118       DeleteDefaultObjectAclRequest const&) override;
119   StatusOr<ObjectAccessControl> GetDefaultObjectAcl(
120       GetDefaultObjectAclRequest const&) override;
121   StatusOr<ObjectAccessControl> UpdateDefaultObjectAcl(
122       UpdateDefaultObjectAclRequest const&) override;
123   StatusOr<ObjectAccessControl> PatchDefaultObjectAcl(
124       PatchDefaultObjectAclRequest const&) override;
125 
126   StatusOr<ServiceAccount> GetServiceAccount(
127       GetProjectServiceAccountRequest const&) override;
128   StatusOr<ListHmacKeysResponse> ListHmacKeys(
129       ListHmacKeysRequest const&) override;
130   StatusOr<CreateHmacKeyResponse> CreateHmacKey(
131       CreateHmacKeyRequest const&) override;
132   StatusOr<EmptyResponse> DeleteHmacKey(DeleteHmacKeyRequest const&) override;
133   StatusOr<HmacKeyMetadata> GetHmacKey(GetHmacKeyRequest const&) override;
134   StatusOr<HmacKeyMetadata> UpdateHmacKey(UpdateHmacKeyRequest const&) override;
135   StatusOr<SignBlobResponse> SignBlob(SignBlobRequest const&) override;
136 
137   StatusOr<ListNotificationsResponse> ListNotifications(
138       ListNotificationsRequest const&) override;
139   StatusOr<NotificationMetadata> CreateNotification(
140       CreateNotificationRequest const&) override;
141   StatusOr<NotificationMetadata> GetNotification(
142       GetNotificationRequest const&) override;
143   StatusOr<EmptyResponse> DeleteNotification(
144       DeleteNotificationRequest const&) override;
145 
146  private:
147   std::shared_ptr<GrpcClient> grpc_;
148   std::shared_ptr<CurlClient> curl_;
149 };
150 
151 }  // namespace internal
152 }  // namespace STORAGE_CLIENT_NS
153 }  // namespace storage
154 }  // namespace cloud
155 }  // namespace google
156 
157 #endif  // GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_STORAGE_INTERNAL_HYBRID_CLIENT_H
158