1// Copyright (c) 2016, 2018, 2019, Oracle and/or its affiliates. All rights reserved.
2// Code generated. DO NOT EDIT.
3
4// Object Storage Service API
5//
6// Common set of Object Storage and Archive Storage APIs for managing buckets, objects, and related resources.
7//
8
9package objectstorage
10
11import (
12	"context"
13	"fmt"
14	"github.com/oracle/oci-go-sdk/common"
15	"net/http"
16)
17
18//ObjectStorageClient a client for ObjectStorage
19type ObjectStorageClient struct {
20	common.BaseClient
21	config *common.ConfigurationProvider
22}
23
24// NewObjectStorageClientWithConfigurationProvider Creates a new default ObjectStorage client with the given configuration provider.
25// the configuration provider will be used for the default signer as well as reading the region
26func NewObjectStorageClientWithConfigurationProvider(configProvider common.ConfigurationProvider) (client ObjectStorageClient, err error) {
27	baseClient, err := common.NewClientWithConfig(configProvider)
28	if err != nil {
29		return
30	}
31
32	client = ObjectStorageClient{BaseClient: baseClient}
33	err = client.setConfigurationProvider(configProvider)
34	return
35}
36
37// SetRegion overrides the region of this client.
38func (client *ObjectStorageClient) SetRegion(region string) {
39	client.Host = common.StringToRegion(region).EndpointForTemplate("objectstorage", "https://objectstorage.{region}.{secondLevelDomain}")
40}
41
42// SetConfigurationProvider sets the configuration provider including the region, returns an error if is not valid
43func (client *ObjectStorageClient) setConfigurationProvider(configProvider common.ConfigurationProvider) error {
44	if ok, err := common.IsConfigurationProviderValid(configProvider); !ok {
45		return err
46	}
47
48	// Error has been checked already
49	region, _ := configProvider.Region()
50	client.SetRegion(region)
51	client.config = &configProvider
52	return nil
53}
54
55// ConfigurationProvider the ConfigurationProvider used in this client, or null if none set
56func (client *ObjectStorageClient) ConfigurationProvider() *common.ConfigurationProvider {
57	return client.config
58}
59
60// AbortMultipartUpload Aborts an in-progress multipart upload and deletes all parts that have been uploaded.
61func (client ObjectStorageClient) AbortMultipartUpload(ctx context.Context, request AbortMultipartUploadRequest) (response AbortMultipartUploadResponse, err error) {
62	var ociResponse common.OCIResponse
63	policy := common.NoRetryPolicy()
64	if request.RetryPolicy() != nil {
65		policy = *request.RetryPolicy()
66	}
67	ociResponse, err = common.Retry(ctx, request, client.abortMultipartUpload, policy)
68	if err != nil {
69		if ociResponse != nil {
70			response = AbortMultipartUploadResponse{RawResponse: ociResponse.HTTPResponse()}
71		}
72		return
73	}
74	if convertedResponse, ok := ociResponse.(AbortMultipartUploadResponse); ok {
75		response = convertedResponse
76	} else {
77		err = fmt.Errorf("failed to convert OCIResponse into AbortMultipartUploadResponse")
78	}
79	return
80}
81
82// abortMultipartUpload implements the OCIOperation interface (enables retrying operations)
83func (client ObjectStorageClient) abortMultipartUpload(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
84	httpRequest, err := request.HTTPRequest(http.MethodDelete, "/n/{namespaceName}/b/{bucketName}/u/{objectName}")
85	if err != nil {
86		return nil, err
87	}
88
89	var response AbortMultipartUploadResponse
90	var httpResponse *http.Response
91	httpResponse, err = client.Call(ctx, &httpRequest)
92	defer common.CloseBodyIfValid(httpResponse)
93	response.RawResponse = httpResponse
94	if err != nil {
95		return response, err
96	}
97
98	err = common.UnmarshalResponse(httpResponse, &response)
99	return response, err
100}
101
102// CancelWorkRequest Cancels a work request.
103func (client ObjectStorageClient) CancelWorkRequest(ctx context.Context, request CancelWorkRequestRequest) (response CancelWorkRequestResponse, err error) {
104	var ociResponse common.OCIResponse
105	policy := common.NoRetryPolicy()
106	if request.RetryPolicy() != nil {
107		policy = *request.RetryPolicy()
108	}
109	ociResponse, err = common.Retry(ctx, request, client.cancelWorkRequest, policy)
110	if err != nil {
111		if ociResponse != nil {
112			response = CancelWorkRequestResponse{RawResponse: ociResponse.HTTPResponse()}
113		}
114		return
115	}
116	if convertedResponse, ok := ociResponse.(CancelWorkRequestResponse); ok {
117		response = convertedResponse
118	} else {
119		err = fmt.Errorf("failed to convert OCIResponse into CancelWorkRequestResponse")
120	}
121	return
122}
123
124// cancelWorkRequest implements the OCIOperation interface (enables retrying operations)
125func (client ObjectStorageClient) cancelWorkRequest(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
126	httpRequest, err := request.HTTPRequest(http.MethodDelete, "/workRequests/{workRequestId}")
127	if err != nil {
128		return nil, err
129	}
130
131	var response CancelWorkRequestResponse
132	var httpResponse *http.Response
133	httpResponse, err = client.Call(ctx, &httpRequest)
134	defer common.CloseBodyIfValid(httpResponse)
135	response.RawResponse = httpResponse
136	if err != nil {
137		return response, err
138	}
139
140	err = common.UnmarshalResponse(httpResponse, &response)
141	return response, err
142}
143
144// CommitMultipartUpload Commits a multipart upload, which involves checking part numbers and entity tags (ETags) of the parts, to create an aggregate object.
145func (client ObjectStorageClient) CommitMultipartUpload(ctx context.Context, request CommitMultipartUploadRequest) (response CommitMultipartUploadResponse, err error) {
146	var ociResponse common.OCIResponse
147	policy := common.NoRetryPolicy()
148	if request.RetryPolicy() != nil {
149		policy = *request.RetryPolicy()
150	}
151	ociResponse, err = common.Retry(ctx, request, client.commitMultipartUpload, policy)
152	if err != nil {
153		if ociResponse != nil {
154			response = CommitMultipartUploadResponse{RawResponse: ociResponse.HTTPResponse()}
155		}
156		return
157	}
158	if convertedResponse, ok := ociResponse.(CommitMultipartUploadResponse); ok {
159		response = convertedResponse
160	} else {
161		err = fmt.Errorf("failed to convert OCIResponse into CommitMultipartUploadResponse")
162	}
163	return
164}
165
166// commitMultipartUpload implements the OCIOperation interface (enables retrying operations)
167func (client ObjectStorageClient) commitMultipartUpload(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
168	httpRequest, err := request.HTTPRequest(http.MethodPost, "/n/{namespaceName}/b/{bucketName}/u/{objectName}")
169	if err != nil {
170		return nil, err
171	}
172
173	var response CommitMultipartUploadResponse
174	var httpResponse *http.Response
175	httpResponse, err = client.Call(ctx, &httpRequest)
176	defer common.CloseBodyIfValid(httpResponse)
177	response.RawResponse = httpResponse
178	if err != nil {
179		return response, err
180	}
181
182	err = common.UnmarshalResponse(httpResponse, &response)
183	return response, err
184}
185
186// CopyObject Creates a request to copy an object within a region or to another region.
187func (client ObjectStorageClient) CopyObject(ctx context.Context, request CopyObjectRequest) (response CopyObjectResponse, err error) {
188	var ociResponse common.OCIResponse
189	policy := common.NoRetryPolicy()
190	if request.RetryPolicy() != nil {
191		policy = *request.RetryPolicy()
192	}
193	ociResponse, err = common.Retry(ctx, request, client.copyObject, policy)
194	if err != nil {
195		if ociResponse != nil {
196			response = CopyObjectResponse{RawResponse: ociResponse.HTTPResponse()}
197		}
198		return
199	}
200	if convertedResponse, ok := ociResponse.(CopyObjectResponse); ok {
201		response = convertedResponse
202	} else {
203		err = fmt.Errorf("failed to convert OCIResponse into CopyObjectResponse")
204	}
205	return
206}
207
208// copyObject implements the OCIOperation interface (enables retrying operations)
209func (client ObjectStorageClient) copyObject(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
210	httpRequest, err := request.HTTPRequest(http.MethodPost, "/n/{namespaceName}/b/{bucketName}/actions/copyObject")
211	if err != nil {
212		return nil, err
213	}
214
215	var response CopyObjectResponse
216	var httpResponse *http.Response
217	httpResponse, err = client.Call(ctx, &httpRequest)
218	defer common.CloseBodyIfValid(httpResponse)
219	response.RawResponse = httpResponse
220	if err != nil {
221		return response, err
222	}
223
224	err = common.UnmarshalResponse(httpResponse, &response)
225	return response, err
226}
227
228// CreateBucket Creates a bucket in the given namespace with a bucket name and optional user-defined metadata. Avoid entering
229// confidential information in bucket names.
230func (client ObjectStorageClient) CreateBucket(ctx context.Context, request CreateBucketRequest) (response CreateBucketResponse, err error) {
231	var ociResponse common.OCIResponse
232	policy := common.NoRetryPolicy()
233	if request.RetryPolicy() != nil {
234		policy = *request.RetryPolicy()
235	}
236	ociResponse, err = common.Retry(ctx, request, client.createBucket, policy)
237	if err != nil {
238		if ociResponse != nil {
239			response = CreateBucketResponse{RawResponse: ociResponse.HTTPResponse()}
240		}
241		return
242	}
243	if convertedResponse, ok := ociResponse.(CreateBucketResponse); ok {
244		response = convertedResponse
245	} else {
246		err = fmt.Errorf("failed to convert OCIResponse into CreateBucketResponse")
247	}
248	return
249}
250
251// createBucket implements the OCIOperation interface (enables retrying operations)
252func (client ObjectStorageClient) createBucket(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
253	httpRequest, err := request.HTTPRequest(http.MethodPost, "/n/{namespaceName}/b")
254	if err != nil {
255		return nil, err
256	}
257
258	var response CreateBucketResponse
259	var httpResponse *http.Response
260	httpResponse, err = client.Call(ctx, &httpRequest)
261	defer common.CloseBodyIfValid(httpResponse)
262	response.RawResponse = httpResponse
263	if err != nil {
264		return response, err
265	}
266
267	err = common.UnmarshalResponse(httpResponse, &response)
268	return response, err
269}
270
271// CreateMultipartUpload Starts a new multipart upload to a specific object in the given bucket in the given namespace.
272func (client ObjectStorageClient) CreateMultipartUpload(ctx context.Context, request CreateMultipartUploadRequest) (response CreateMultipartUploadResponse, err error) {
273	var ociResponse common.OCIResponse
274	policy := common.NoRetryPolicy()
275	if request.RetryPolicy() != nil {
276		policy = *request.RetryPolicy()
277	}
278	ociResponse, err = common.Retry(ctx, request, client.createMultipartUpload, policy)
279	if err != nil {
280		if ociResponse != nil {
281			response = CreateMultipartUploadResponse{RawResponse: ociResponse.HTTPResponse()}
282		}
283		return
284	}
285	if convertedResponse, ok := ociResponse.(CreateMultipartUploadResponse); ok {
286		response = convertedResponse
287	} else {
288		err = fmt.Errorf("failed to convert OCIResponse into CreateMultipartUploadResponse")
289	}
290	return
291}
292
293// createMultipartUpload implements the OCIOperation interface (enables retrying operations)
294func (client ObjectStorageClient) createMultipartUpload(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
295	httpRequest, err := request.HTTPRequest(http.MethodPost, "/n/{namespaceName}/b/{bucketName}/u")
296	if err != nil {
297		return nil, err
298	}
299
300	var response CreateMultipartUploadResponse
301	var httpResponse *http.Response
302	httpResponse, err = client.Call(ctx, &httpRequest)
303	defer common.CloseBodyIfValid(httpResponse)
304	response.RawResponse = httpResponse
305	if err != nil {
306		return response, err
307	}
308
309	err = common.UnmarshalResponse(httpResponse, &response)
310	return response, err
311}
312
313// CreatePreauthenticatedRequest Creates a pre-authenticated request specific to the bucket.
314func (client ObjectStorageClient) CreatePreauthenticatedRequest(ctx context.Context, request CreatePreauthenticatedRequestRequest) (response CreatePreauthenticatedRequestResponse, err error) {
315	var ociResponse common.OCIResponse
316	policy := common.NoRetryPolicy()
317	if request.RetryPolicy() != nil {
318		policy = *request.RetryPolicy()
319	}
320	ociResponse, err = common.Retry(ctx, request, client.createPreauthenticatedRequest, policy)
321	if err != nil {
322		if ociResponse != nil {
323			response = CreatePreauthenticatedRequestResponse{RawResponse: ociResponse.HTTPResponse()}
324		}
325		return
326	}
327	if convertedResponse, ok := ociResponse.(CreatePreauthenticatedRequestResponse); ok {
328		response = convertedResponse
329	} else {
330		err = fmt.Errorf("failed to convert OCIResponse into CreatePreauthenticatedRequestResponse")
331	}
332	return
333}
334
335// createPreauthenticatedRequest implements the OCIOperation interface (enables retrying operations)
336func (client ObjectStorageClient) createPreauthenticatedRequest(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
337	httpRequest, err := request.HTTPRequest(http.MethodPost, "/n/{namespaceName}/b/{bucketName}/p")
338	if err != nil {
339		return nil, err
340	}
341
342	var response CreatePreauthenticatedRequestResponse
343	var httpResponse *http.Response
344	httpResponse, err = client.Call(ctx, &httpRequest)
345	defer common.CloseBodyIfValid(httpResponse)
346	response.RawResponse = httpResponse
347	if err != nil {
348		return response, err
349	}
350
351	err = common.UnmarshalResponse(httpResponse, &response)
352	return response, err
353}
354
355// DeleteBucket Deletes a bucket if the bucket is already empty. If the bucket is not empty, use
356// DeleteObject first. In addition,
357// you cannot delete a bucket that has a multipart upload in progress or a pre-authenticated
358// request associated with that bucket.
359func (client ObjectStorageClient) DeleteBucket(ctx context.Context, request DeleteBucketRequest) (response DeleteBucketResponse, err error) {
360	var ociResponse common.OCIResponse
361	policy := common.NoRetryPolicy()
362	if request.RetryPolicy() != nil {
363		policy = *request.RetryPolicy()
364	}
365	ociResponse, err = common.Retry(ctx, request, client.deleteBucket, policy)
366	if err != nil {
367		if ociResponse != nil {
368			response = DeleteBucketResponse{RawResponse: ociResponse.HTTPResponse()}
369		}
370		return
371	}
372	if convertedResponse, ok := ociResponse.(DeleteBucketResponse); ok {
373		response = convertedResponse
374	} else {
375		err = fmt.Errorf("failed to convert OCIResponse into DeleteBucketResponse")
376	}
377	return
378}
379
380// deleteBucket implements the OCIOperation interface (enables retrying operations)
381func (client ObjectStorageClient) deleteBucket(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
382	httpRequest, err := request.HTTPRequest(http.MethodDelete, "/n/{namespaceName}/b/{bucketName}")
383	if err != nil {
384		return nil, err
385	}
386
387	var response DeleteBucketResponse
388	var httpResponse *http.Response
389	httpResponse, err = client.Call(ctx, &httpRequest)
390	defer common.CloseBodyIfValid(httpResponse)
391	response.RawResponse = httpResponse
392	if err != nil {
393		return response, err
394	}
395
396	err = common.UnmarshalResponse(httpResponse, &response)
397	return response, err
398}
399
400// DeleteObject Deletes an object.
401func (client ObjectStorageClient) DeleteObject(ctx context.Context, request DeleteObjectRequest) (response DeleteObjectResponse, err error) {
402	var ociResponse common.OCIResponse
403	policy := common.NoRetryPolicy()
404	if request.RetryPolicy() != nil {
405		policy = *request.RetryPolicy()
406	}
407	ociResponse, err = common.Retry(ctx, request, client.deleteObject, policy)
408	if err != nil {
409		if ociResponse != nil {
410			response = DeleteObjectResponse{RawResponse: ociResponse.HTTPResponse()}
411		}
412		return
413	}
414	if convertedResponse, ok := ociResponse.(DeleteObjectResponse); ok {
415		response = convertedResponse
416	} else {
417		err = fmt.Errorf("failed to convert OCIResponse into DeleteObjectResponse")
418	}
419	return
420}
421
422// deleteObject implements the OCIOperation interface (enables retrying operations)
423func (client ObjectStorageClient) deleteObject(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
424	httpRequest, err := request.HTTPRequest(http.MethodDelete, "/n/{namespaceName}/b/{bucketName}/o/{objectName}")
425	if err != nil {
426		return nil, err
427	}
428
429	var response DeleteObjectResponse
430	var httpResponse *http.Response
431	httpResponse, err = client.Call(ctx, &httpRequest)
432	defer common.CloseBodyIfValid(httpResponse)
433	response.RawResponse = httpResponse
434	if err != nil {
435		return response, err
436	}
437
438	err = common.UnmarshalResponse(httpResponse, &response)
439	return response, err
440}
441
442// DeleteObjectLifecyclePolicy Deletes the object lifecycle policy for the bucket.
443func (client ObjectStorageClient) DeleteObjectLifecyclePolicy(ctx context.Context, request DeleteObjectLifecyclePolicyRequest) (response DeleteObjectLifecyclePolicyResponse, err error) {
444	var ociResponse common.OCIResponse
445	policy := common.NoRetryPolicy()
446	if request.RetryPolicy() != nil {
447		policy = *request.RetryPolicy()
448	}
449	ociResponse, err = common.Retry(ctx, request, client.deleteObjectLifecyclePolicy, policy)
450	if err != nil {
451		if ociResponse != nil {
452			response = DeleteObjectLifecyclePolicyResponse{RawResponse: ociResponse.HTTPResponse()}
453		}
454		return
455	}
456	if convertedResponse, ok := ociResponse.(DeleteObjectLifecyclePolicyResponse); ok {
457		response = convertedResponse
458	} else {
459		err = fmt.Errorf("failed to convert OCIResponse into DeleteObjectLifecyclePolicyResponse")
460	}
461	return
462}
463
464// deleteObjectLifecyclePolicy implements the OCIOperation interface (enables retrying operations)
465func (client ObjectStorageClient) deleteObjectLifecyclePolicy(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
466	httpRequest, err := request.HTTPRequest(http.MethodDelete, "/n/{namespaceName}/b/{bucketName}/l")
467	if err != nil {
468		return nil, err
469	}
470
471	var response DeleteObjectLifecyclePolicyResponse
472	var httpResponse *http.Response
473	httpResponse, err = client.Call(ctx, &httpRequest)
474	defer common.CloseBodyIfValid(httpResponse)
475	response.RawResponse = httpResponse
476	if err != nil {
477		return response, err
478	}
479
480	err = common.UnmarshalResponse(httpResponse, &response)
481	return response, err
482}
483
484// DeletePreauthenticatedRequest Deletes the pre-authenticated request for the bucket.
485func (client ObjectStorageClient) DeletePreauthenticatedRequest(ctx context.Context, request DeletePreauthenticatedRequestRequest) (response DeletePreauthenticatedRequestResponse, err error) {
486	var ociResponse common.OCIResponse
487	policy := common.NoRetryPolicy()
488	if request.RetryPolicy() != nil {
489		policy = *request.RetryPolicy()
490	}
491	ociResponse, err = common.Retry(ctx, request, client.deletePreauthenticatedRequest, policy)
492	if err != nil {
493		if ociResponse != nil {
494			response = DeletePreauthenticatedRequestResponse{RawResponse: ociResponse.HTTPResponse()}
495		}
496		return
497	}
498	if convertedResponse, ok := ociResponse.(DeletePreauthenticatedRequestResponse); ok {
499		response = convertedResponse
500	} else {
501		err = fmt.Errorf("failed to convert OCIResponse into DeletePreauthenticatedRequestResponse")
502	}
503	return
504}
505
506// deletePreauthenticatedRequest implements the OCIOperation interface (enables retrying operations)
507func (client ObjectStorageClient) deletePreauthenticatedRequest(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
508	httpRequest, err := request.HTTPRequest(http.MethodDelete, "/n/{namespaceName}/b/{bucketName}/p/{parId}")
509	if err != nil {
510		return nil, err
511	}
512
513	var response DeletePreauthenticatedRequestResponse
514	var httpResponse *http.Response
515	httpResponse, err = client.Call(ctx, &httpRequest)
516	defer common.CloseBodyIfValid(httpResponse)
517	response.RawResponse = httpResponse
518	if err != nil {
519		return response, err
520	}
521
522	err = common.UnmarshalResponse(httpResponse, &response)
523	return response, err
524}
525
526// GetBucket Gets the current representation of the given bucket in the given Object Storage namespace.
527func (client ObjectStorageClient) GetBucket(ctx context.Context, request GetBucketRequest) (response GetBucketResponse, err error) {
528	var ociResponse common.OCIResponse
529	policy := common.NoRetryPolicy()
530	if request.RetryPolicy() != nil {
531		policy = *request.RetryPolicy()
532	}
533	ociResponse, err = common.Retry(ctx, request, client.getBucket, policy)
534	if err != nil {
535		if ociResponse != nil {
536			response = GetBucketResponse{RawResponse: ociResponse.HTTPResponse()}
537		}
538		return
539	}
540	if convertedResponse, ok := ociResponse.(GetBucketResponse); ok {
541		response = convertedResponse
542	} else {
543		err = fmt.Errorf("failed to convert OCIResponse into GetBucketResponse")
544	}
545	return
546}
547
548// getBucket implements the OCIOperation interface (enables retrying operations)
549func (client ObjectStorageClient) getBucket(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
550	httpRequest, err := request.HTTPRequest(http.MethodGet, "/n/{namespaceName}/b/{bucketName}")
551	if err != nil {
552		return nil, err
553	}
554
555	var response GetBucketResponse
556	var httpResponse *http.Response
557	httpResponse, err = client.Call(ctx, &httpRequest)
558	defer common.CloseBodyIfValid(httpResponse)
559	response.RawResponse = httpResponse
560	if err != nil {
561		return response, err
562	}
563
564	err = common.UnmarshalResponse(httpResponse, &response)
565	return response, err
566}
567
568// GetNamespace Each Oracle Cloud Infrastructure tenant is assigned one unique and uneditable Object Storage namespace. The namespace
569// is a system-generated string assigned during account creation. For some older tenancies, the namespace string may be
570// the tenancy name in all lower-case letters. You cannot edit a namespace.
571// GetNamespace returns the name of the Object Storage namespace for the user making the request.
572// If an optional compartmentId query parameter is provided, GetNamespace returns the namespace name of the corresponding
573// tenancy, provided the user has access to it.
574func (client ObjectStorageClient) GetNamespace(ctx context.Context, request GetNamespaceRequest) (response GetNamespaceResponse, err error) {
575	var ociResponse common.OCIResponse
576	policy := common.NoRetryPolicy()
577	if request.RetryPolicy() != nil {
578		policy = *request.RetryPolicy()
579	}
580	ociResponse, err = common.Retry(ctx, request, client.getNamespace, policy)
581	if err != nil {
582		if ociResponse != nil {
583			response = GetNamespaceResponse{RawResponse: ociResponse.HTTPResponse()}
584		}
585		return
586	}
587	if convertedResponse, ok := ociResponse.(GetNamespaceResponse); ok {
588		response = convertedResponse
589	} else {
590		err = fmt.Errorf("failed to convert OCIResponse into GetNamespaceResponse")
591	}
592	return
593}
594
595// getNamespace implements the OCIOperation interface (enables retrying operations)
596func (client ObjectStorageClient) getNamespace(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
597	httpRequest, err := request.HTTPRequest(http.MethodGet, "/n")
598	if err != nil {
599		return nil, err
600	}
601
602	var response GetNamespaceResponse
603	var httpResponse *http.Response
604	httpResponse, err = client.Call(ctx, &httpRequest)
605	defer common.CloseBodyIfValid(httpResponse)
606	response.RawResponse = httpResponse
607	if err != nil {
608		return response, err
609	}
610
611	err = common.UnmarshalResponse(httpResponse, &response)
612	return response, err
613}
614
615// GetNamespaceMetadata Gets the metadata for the Object Storage namespace, which contains defaultS3CompartmentId and
616// defaultSwiftCompartmentId.
617// Any user with the OBJECTSTORAGE_NAMESPACE_READ permission will be able to see the current metadata. If you are
618// not authorized, talk to an administrator. If you are an administrator who needs to write policies
619// to give users access, see
620// Getting Started with Policies (https://docs.cloud.oracle.com/Content/Identity/Concepts/policygetstarted.htm).
621func (client ObjectStorageClient) GetNamespaceMetadata(ctx context.Context, request GetNamespaceMetadataRequest) (response GetNamespaceMetadataResponse, err error) {
622	var ociResponse common.OCIResponse
623	policy := common.NoRetryPolicy()
624	if request.RetryPolicy() != nil {
625		policy = *request.RetryPolicy()
626	}
627	ociResponse, err = common.Retry(ctx, request, client.getNamespaceMetadata, policy)
628	if err != nil {
629		if ociResponse != nil {
630			response = GetNamespaceMetadataResponse{RawResponse: ociResponse.HTTPResponse()}
631		}
632		return
633	}
634	if convertedResponse, ok := ociResponse.(GetNamespaceMetadataResponse); ok {
635		response = convertedResponse
636	} else {
637		err = fmt.Errorf("failed to convert OCIResponse into GetNamespaceMetadataResponse")
638	}
639	return
640}
641
642// getNamespaceMetadata implements the OCIOperation interface (enables retrying operations)
643func (client ObjectStorageClient) getNamespaceMetadata(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
644	httpRequest, err := request.HTTPRequest(http.MethodGet, "/n/{namespaceName}")
645	if err != nil {
646		return nil, err
647	}
648
649	var response GetNamespaceMetadataResponse
650	var httpResponse *http.Response
651	httpResponse, err = client.Call(ctx, &httpRequest)
652	defer common.CloseBodyIfValid(httpResponse)
653	response.RawResponse = httpResponse
654	if err != nil {
655		return response, err
656	}
657
658	err = common.UnmarshalResponse(httpResponse, &response)
659	return response, err
660}
661
662// GetObject Gets the metadata and body of an object.
663func (client ObjectStorageClient) GetObject(ctx context.Context, request GetObjectRequest) (response GetObjectResponse, err error) {
664	var ociResponse common.OCIResponse
665	policy := common.NoRetryPolicy()
666	if request.RetryPolicy() != nil {
667		policy = *request.RetryPolicy()
668	}
669	ociResponse, err = common.Retry(ctx, request, client.getObject, policy)
670	if err != nil {
671		if ociResponse != nil {
672			response = GetObjectResponse{RawResponse: ociResponse.HTTPResponse()}
673		}
674		return
675	}
676	if convertedResponse, ok := ociResponse.(GetObjectResponse); ok {
677		response = convertedResponse
678	} else {
679		err = fmt.Errorf("failed to convert OCIResponse into GetObjectResponse")
680	}
681	return
682}
683
684// getObject implements the OCIOperation interface (enables retrying operations)
685func (client ObjectStorageClient) getObject(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
686	httpRequest, err := request.HTTPRequest(http.MethodGet, "/n/{namespaceName}/b/{bucketName}/o/{objectName}")
687	if err != nil {
688		return nil, err
689	}
690
691	var response GetObjectResponse
692	var httpResponse *http.Response
693	httpResponse, err = client.Call(ctx, &httpRequest)
694	response.RawResponse = httpResponse
695	if err != nil {
696		return response, err
697	}
698
699	err = common.UnmarshalResponse(httpResponse, &response)
700	return response, err
701}
702
703// GetObjectLifecyclePolicy Gets the object lifecycle policy for the bucket.
704func (client ObjectStorageClient) GetObjectLifecyclePolicy(ctx context.Context, request GetObjectLifecyclePolicyRequest) (response GetObjectLifecyclePolicyResponse, err error) {
705	var ociResponse common.OCIResponse
706	policy := common.NoRetryPolicy()
707	if request.RetryPolicy() != nil {
708		policy = *request.RetryPolicy()
709	}
710	ociResponse, err = common.Retry(ctx, request, client.getObjectLifecyclePolicy, policy)
711	if err != nil {
712		if ociResponse != nil {
713			response = GetObjectLifecyclePolicyResponse{RawResponse: ociResponse.HTTPResponse()}
714		}
715		return
716	}
717	if convertedResponse, ok := ociResponse.(GetObjectLifecyclePolicyResponse); ok {
718		response = convertedResponse
719	} else {
720		err = fmt.Errorf("failed to convert OCIResponse into GetObjectLifecyclePolicyResponse")
721	}
722	return
723}
724
725// getObjectLifecyclePolicy implements the OCIOperation interface (enables retrying operations)
726func (client ObjectStorageClient) getObjectLifecyclePolicy(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
727	httpRequest, err := request.HTTPRequest(http.MethodGet, "/n/{namespaceName}/b/{bucketName}/l")
728	if err != nil {
729		return nil, err
730	}
731
732	var response GetObjectLifecyclePolicyResponse
733	var httpResponse *http.Response
734	httpResponse, err = client.Call(ctx, &httpRequest)
735	defer common.CloseBodyIfValid(httpResponse)
736	response.RawResponse = httpResponse
737	if err != nil {
738		return response, err
739	}
740
741	err = common.UnmarshalResponse(httpResponse, &response)
742	return response, err
743}
744
745// GetPreauthenticatedRequest Gets the pre-authenticated request for the bucket.
746func (client ObjectStorageClient) GetPreauthenticatedRequest(ctx context.Context, request GetPreauthenticatedRequestRequest) (response GetPreauthenticatedRequestResponse, err error) {
747	var ociResponse common.OCIResponse
748	policy := common.NoRetryPolicy()
749	if request.RetryPolicy() != nil {
750		policy = *request.RetryPolicy()
751	}
752	ociResponse, err = common.Retry(ctx, request, client.getPreauthenticatedRequest, policy)
753	if err != nil {
754		if ociResponse != nil {
755			response = GetPreauthenticatedRequestResponse{RawResponse: ociResponse.HTTPResponse()}
756		}
757		return
758	}
759	if convertedResponse, ok := ociResponse.(GetPreauthenticatedRequestResponse); ok {
760		response = convertedResponse
761	} else {
762		err = fmt.Errorf("failed to convert OCIResponse into GetPreauthenticatedRequestResponse")
763	}
764	return
765}
766
767// getPreauthenticatedRequest implements the OCIOperation interface (enables retrying operations)
768func (client ObjectStorageClient) getPreauthenticatedRequest(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
769	httpRequest, err := request.HTTPRequest(http.MethodGet, "/n/{namespaceName}/b/{bucketName}/p/{parId}")
770	if err != nil {
771		return nil, err
772	}
773
774	var response GetPreauthenticatedRequestResponse
775	var httpResponse *http.Response
776	httpResponse, err = client.Call(ctx, &httpRequest)
777	defer common.CloseBodyIfValid(httpResponse)
778	response.RawResponse = httpResponse
779	if err != nil {
780		return response, err
781	}
782
783	err = common.UnmarshalResponse(httpResponse, &response)
784	return response, err
785}
786
787// GetWorkRequest Gets the status of the work request for the given ID.
788func (client ObjectStorageClient) GetWorkRequest(ctx context.Context, request GetWorkRequestRequest) (response GetWorkRequestResponse, err error) {
789	var ociResponse common.OCIResponse
790	policy := common.NoRetryPolicy()
791	if request.RetryPolicy() != nil {
792		policy = *request.RetryPolicy()
793	}
794	ociResponse, err = common.Retry(ctx, request, client.getWorkRequest, policy)
795	if err != nil {
796		if ociResponse != nil {
797			response = GetWorkRequestResponse{RawResponse: ociResponse.HTTPResponse()}
798		}
799		return
800	}
801	if convertedResponse, ok := ociResponse.(GetWorkRequestResponse); ok {
802		response = convertedResponse
803	} else {
804		err = fmt.Errorf("failed to convert OCIResponse into GetWorkRequestResponse")
805	}
806	return
807}
808
809// getWorkRequest implements the OCIOperation interface (enables retrying operations)
810func (client ObjectStorageClient) getWorkRequest(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
811	httpRequest, err := request.HTTPRequest(http.MethodGet, "/workRequests/{workRequestId}")
812	if err != nil {
813		return nil, err
814	}
815
816	var response GetWorkRequestResponse
817	var httpResponse *http.Response
818	httpResponse, err = client.Call(ctx, &httpRequest)
819	defer common.CloseBodyIfValid(httpResponse)
820	response.RawResponse = httpResponse
821	if err != nil {
822		return response, err
823	}
824
825	err = common.UnmarshalResponse(httpResponse, &response)
826	return response, err
827}
828
829// HeadBucket Efficiently checks to see if a bucket exists and gets the current entity tag (ETag) for the bucket.
830func (client ObjectStorageClient) HeadBucket(ctx context.Context, request HeadBucketRequest) (response HeadBucketResponse, err error) {
831	var ociResponse common.OCIResponse
832	policy := common.NoRetryPolicy()
833	if request.RetryPolicy() != nil {
834		policy = *request.RetryPolicy()
835	}
836	ociResponse, err = common.Retry(ctx, request, client.headBucket, policy)
837	if err != nil {
838		if ociResponse != nil {
839			response = HeadBucketResponse{RawResponse: ociResponse.HTTPResponse()}
840		}
841		return
842	}
843	if convertedResponse, ok := ociResponse.(HeadBucketResponse); ok {
844		response = convertedResponse
845	} else {
846		err = fmt.Errorf("failed to convert OCIResponse into HeadBucketResponse")
847	}
848	return
849}
850
851// headBucket implements the OCIOperation interface (enables retrying operations)
852func (client ObjectStorageClient) headBucket(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
853	httpRequest, err := request.HTTPRequest(http.MethodHead, "/n/{namespaceName}/b/{bucketName}")
854	if err != nil {
855		return nil, err
856	}
857
858	var response HeadBucketResponse
859	var httpResponse *http.Response
860	httpResponse, err = client.Call(ctx, &httpRequest)
861	defer common.CloseBodyIfValid(httpResponse)
862	response.RawResponse = httpResponse
863	if err != nil {
864		return response, err
865	}
866
867	err = common.UnmarshalResponse(httpResponse, &response)
868	return response, err
869}
870
871// HeadObject Gets the user-defined metadata and entity tag (ETag) for an object.
872func (client ObjectStorageClient) HeadObject(ctx context.Context, request HeadObjectRequest) (response HeadObjectResponse, err error) {
873	var ociResponse common.OCIResponse
874	policy := common.NoRetryPolicy()
875	if request.RetryPolicy() != nil {
876		policy = *request.RetryPolicy()
877	}
878	ociResponse, err = common.Retry(ctx, request, client.headObject, policy)
879	if err != nil {
880		if ociResponse != nil {
881			response = HeadObjectResponse{RawResponse: ociResponse.HTTPResponse()}
882		}
883		return
884	}
885	if convertedResponse, ok := ociResponse.(HeadObjectResponse); ok {
886		response = convertedResponse
887	} else {
888		err = fmt.Errorf("failed to convert OCIResponse into HeadObjectResponse")
889	}
890	return
891}
892
893// headObject implements the OCIOperation interface (enables retrying operations)
894func (client ObjectStorageClient) headObject(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
895	httpRequest, err := request.HTTPRequest(http.MethodHead, "/n/{namespaceName}/b/{bucketName}/o/{objectName}")
896	if err != nil {
897		return nil, err
898	}
899
900	var response HeadObjectResponse
901	var httpResponse *http.Response
902	httpResponse, err = client.Call(ctx, &httpRequest)
903	defer common.CloseBodyIfValid(httpResponse)
904	response.RawResponse = httpResponse
905	if err != nil {
906		return response, err
907	}
908
909	err = common.UnmarshalResponse(httpResponse, &response)
910	return response, err
911}
912
913// ListBuckets Gets a list of all BucketSummary items in a compartment. A BucketSummary contains only summary fields for the bucket
914// and does not contain fields like the user-defined metadata.
915// To use this and other API operations, you must be authorized in an IAM policy. If you are not authorized,
916// talk to an administrator. If you are an administrator who needs to write policies to give users access, see
917// Getting Started with Policies (https://docs.cloud.oracle.com/Content/Identity/Concepts/policygetstarted.htm).
918func (client ObjectStorageClient) ListBuckets(ctx context.Context, request ListBucketsRequest) (response ListBucketsResponse, err error) {
919	var ociResponse common.OCIResponse
920	policy := common.NoRetryPolicy()
921	if request.RetryPolicy() != nil {
922		policy = *request.RetryPolicy()
923	}
924	ociResponse, err = common.Retry(ctx, request, client.listBuckets, policy)
925	if err != nil {
926		if ociResponse != nil {
927			response = ListBucketsResponse{RawResponse: ociResponse.HTTPResponse()}
928		}
929		return
930	}
931	if convertedResponse, ok := ociResponse.(ListBucketsResponse); ok {
932		response = convertedResponse
933	} else {
934		err = fmt.Errorf("failed to convert OCIResponse into ListBucketsResponse")
935	}
936	return
937}
938
939// listBuckets implements the OCIOperation interface (enables retrying operations)
940func (client ObjectStorageClient) listBuckets(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
941	httpRequest, err := request.HTTPRequest(http.MethodGet, "/n/{namespaceName}/b")
942	if err != nil {
943		return nil, err
944	}
945
946	var response ListBucketsResponse
947	var httpResponse *http.Response
948	httpResponse, err = client.Call(ctx, &httpRequest)
949	defer common.CloseBodyIfValid(httpResponse)
950	response.RawResponse = httpResponse
951	if err != nil {
952		return response, err
953	}
954
955	err = common.UnmarshalResponse(httpResponse, &response)
956	return response, err
957}
958
959// ListMultipartUploadParts Lists the parts of an in-progress multipart upload.
960func (client ObjectStorageClient) ListMultipartUploadParts(ctx context.Context, request ListMultipartUploadPartsRequest) (response ListMultipartUploadPartsResponse, err error) {
961	var ociResponse common.OCIResponse
962	policy := common.NoRetryPolicy()
963	if request.RetryPolicy() != nil {
964		policy = *request.RetryPolicy()
965	}
966	ociResponse, err = common.Retry(ctx, request, client.listMultipartUploadParts, policy)
967	if err != nil {
968		if ociResponse != nil {
969			response = ListMultipartUploadPartsResponse{RawResponse: ociResponse.HTTPResponse()}
970		}
971		return
972	}
973	if convertedResponse, ok := ociResponse.(ListMultipartUploadPartsResponse); ok {
974		response = convertedResponse
975	} else {
976		err = fmt.Errorf("failed to convert OCIResponse into ListMultipartUploadPartsResponse")
977	}
978	return
979}
980
981// listMultipartUploadParts implements the OCIOperation interface (enables retrying operations)
982func (client ObjectStorageClient) listMultipartUploadParts(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
983	httpRequest, err := request.HTTPRequest(http.MethodGet, "/n/{namespaceName}/b/{bucketName}/u/{objectName}")
984	if err != nil {
985		return nil, err
986	}
987
988	var response ListMultipartUploadPartsResponse
989	var httpResponse *http.Response
990	httpResponse, err = client.Call(ctx, &httpRequest)
991	defer common.CloseBodyIfValid(httpResponse)
992	response.RawResponse = httpResponse
993	if err != nil {
994		return response, err
995	}
996
997	err = common.UnmarshalResponse(httpResponse, &response)
998	return response, err
999}
1000
1001// ListMultipartUploads Lists all of the in-progress multipart uploads for the given bucket in the given Object Storage namespace.
1002func (client ObjectStorageClient) ListMultipartUploads(ctx context.Context, request ListMultipartUploadsRequest) (response ListMultipartUploadsResponse, err error) {
1003	var ociResponse common.OCIResponse
1004	policy := common.NoRetryPolicy()
1005	if request.RetryPolicy() != nil {
1006		policy = *request.RetryPolicy()
1007	}
1008	ociResponse, err = common.Retry(ctx, request, client.listMultipartUploads, policy)
1009	if err != nil {
1010		if ociResponse != nil {
1011			response = ListMultipartUploadsResponse{RawResponse: ociResponse.HTTPResponse()}
1012		}
1013		return
1014	}
1015	if convertedResponse, ok := ociResponse.(ListMultipartUploadsResponse); ok {
1016		response = convertedResponse
1017	} else {
1018		err = fmt.Errorf("failed to convert OCIResponse into ListMultipartUploadsResponse")
1019	}
1020	return
1021}
1022
1023// listMultipartUploads implements the OCIOperation interface (enables retrying operations)
1024func (client ObjectStorageClient) listMultipartUploads(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
1025	httpRequest, err := request.HTTPRequest(http.MethodGet, "/n/{namespaceName}/b/{bucketName}/u")
1026	if err != nil {
1027		return nil, err
1028	}
1029
1030	var response ListMultipartUploadsResponse
1031	var httpResponse *http.Response
1032	httpResponse, err = client.Call(ctx, &httpRequest)
1033	defer common.CloseBodyIfValid(httpResponse)
1034	response.RawResponse = httpResponse
1035	if err != nil {
1036		return response, err
1037	}
1038
1039	err = common.UnmarshalResponse(httpResponse, &response)
1040	return response, err
1041}
1042
1043// ListObjects Lists the objects in a bucket.
1044// To use this and other API operations, you must be authorized in an IAM policy. If you are not authorized,
1045// talk to an administrator. If you are an administrator who needs to write policies to give users access, see
1046// Getting Started with Policies (https://docs.cloud.oracle.com/Content/Identity/Concepts/policygetstarted.htm).
1047func (client ObjectStorageClient) ListObjects(ctx context.Context, request ListObjectsRequest) (response ListObjectsResponse, err error) {
1048	var ociResponse common.OCIResponse
1049	policy := common.NoRetryPolicy()
1050	if request.RetryPolicy() != nil {
1051		policy = *request.RetryPolicy()
1052	}
1053	ociResponse, err = common.Retry(ctx, request, client.listObjects, policy)
1054	if err != nil {
1055		if ociResponse != nil {
1056			response = ListObjectsResponse{RawResponse: ociResponse.HTTPResponse()}
1057		}
1058		return
1059	}
1060	if convertedResponse, ok := ociResponse.(ListObjectsResponse); ok {
1061		response = convertedResponse
1062	} else {
1063		err = fmt.Errorf("failed to convert OCIResponse into ListObjectsResponse")
1064	}
1065	return
1066}
1067
1068// listObjects implements the OCIOperation interface (enables retrying operations)
1069func (client ObjectStorageClient) listObjects(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
1070	httpRequest, err := request.HTTPRequest(http.MethodGet, "/n/{namespaceName}/b/{bucketName}/o")
1071	if err != nil {
1072		return nil, err
1073	}
1074
1075	var response ListObjectsResponse
1076	var httpResponse *http.Response
1077	httpResponse, err = client.Call(ctx, &httpRequest)
1078	defer common.CloseBodyIfValid(httpResponse)
1079	response.RawResponse = httpResponse
1080	if err != nil {
1081		return response, err
1082	}
1083
1084	err = common.UnmarshalResponse(httpResponse, &response)
1085	return response, err
1086}
1087
1088// ListPreauthenticatedRequests Lists pre-authenticated requests for the bucket.
1089func (client ObjectStorageClient) ListPreauthenticatedRequests(ctx context.Context, request ListPreauthenticatedRequestsRequest) (response ListPreauthenticatedRequestsResponse, err error) {
1090	var ociResponse common.OCIResponse
1091	policy := common.NoRetryPolicy()
1092	if request.RetryPolicy() != nil {
1093		policy = *request.RetryPolicy()
1094	}
1095	ociResponse, err = common.Retry(ctx, request, client.listPreauthenticatedRequests, policy)
1096	if err != nil {
1097		if ociResponse != nil {
1098			response = ListPreauthenticatedRequestsResponse{RawResponse: ociResponse.HTTPResponse()}
1099		}
1100		return
1101	}
1102	if convertedResponse, ok := ociResponse.(ListPreauthenticatedRequestsResponse); ok {
1103		response = convertedResponse
1104	} else {
1105		err = fmt.Errorf("failed to convert OCIResponse into ListPreauthenticatedRequestsResponse")
1106	}
1107	return
1108}
1109
1110// listPreauthenticatedRequests implements the OCIOperation interface (enables retrying operations)
1111func (client ObjectStorageClient) listPreauthenticatedRequests(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
1112	httpRequest, err := request.HTTPRequest(http.MethodGet, "/n/{namespaceName}/b/{bucketName}/p")
1113	if err != nil {
1114		return nil, err
1115	}
1116
1117	var response ListPreauthenticatedRequestsResponse
1118	var httpResponse *http.Response
1119	httpResponse, err = client.Call(ctx, &httpRequest)
1120	defer common.CloseBodyIfValid(httpResponse)
1121	response.RawResponse = httpResponse
1122	if err != nil {
1123		return response, err
1124	}
1125
1126	err = common.UnmarshalResponse(httpResponse, &response)
1127	return response, err
1128}
1129
1130// ListWorkRequestErrors Lists the errors of the work request with the given ID.
1131func (client ObjectStorageClient) ListWorkRequestErrors(ctx context.Context, request ListWorkRequestErrorsRequest) (response ListWorkRequestErrorsResponse, err error) {
1132	var ociResponse common.OCIResponse
1133	policy := common.NoRetryPolicy()
1134	if request.RetryPolicy() != nil {
1135		policy = *request.RetryPolicy()
1136	}
1137	ociResponse, err = common.Retry(ctx, request, client.listWorkRequestErrors, policy)
1138	if err != nil {
1139		if ociResponse != nil {
1140			response = ListWorkRequestErrorsResponse{RawResponse: ociResponse.HTTPResponse()}
1141		}
1142		return
1143	}
1144	if convertedResponse, ok := ociResponse.(ListWorkRequestErrorsResponse); ok {
1145		response = convertedResponse
1146	} else {
1147		err = fmt.Errorf("failed to convert OCIResponse into ListWorkRequestErrorsResponse")
1148	}
1149	return
1150}
1151
1152// listWorkRequestErrors implements the OCIOperation interface (enables retrying operations)
1153func (client ObjectStorageClient) listWorkRequestErrors(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
1154	httpRequest, err := request.HTTPRequest(http.MethodGet, "/workRequests/{workRequestId}/errors")
1155	if err != nil {
1156		return nil, err
1157	}
1158
1159	var response ListWorkRequestErrorsResponse
1160	var httpResponse *http.Response
1161	httpResponse, err = client.Call(ctx, &httpRequest)
1162	defer common.CloseBodyIfValid(httpResponse)
1163	response.RawResponse = httpResponse
1164	if err != nil {
1165		return response, err
1166	}
1167
1168	err = common.UnmarshalResponse(httpResponse, &response)
1169	return response, err
1170}
1171
1172// ListWorkRequestLogs Lists the logs of the work request with the given ID.
1173func (client ObjectStorageClient) ListWorkRequestLogs(ctx context.Context, request ListWorkRequestLogsRequest) (response ListWorkRequestLogsResponse, err error) {
1174	var ociResponse common.OCIResponse
1175	policy := common.NoRetryPolicy()
1176	if request.RetryPolicy() != nil {
1177		policy = *request.RetryPolicy()
1178	}
1179	ociResponse, err = common.Retry(ctx, request, client.listWorkRequestLogs, policy)
1180	if err != nil {
1181		if ociResponse != nil {
1182			response = ListWorkRequestLogsResponse{RawResponse: ociResponse.HTTPResponse()}
1183		}
1184		return
1185	}
1186	if convertedResponse, ok := ociResponse.(ListWorkRequestLogsResponse); ok {
1187		response = convertedResponse
1188	} else {
1189		err = fmt.Errorf("failed to convert OCIResponse into ListWorkRequestLogsResponse")
1190	}
1191	return
1192}
1193
1194// listWorkRequestLogs implements the OCIOperation interface (enables retrying operations)
1195func (client ObjectStorageClient) listWorkRequestLogs(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
1196	httpRequest, err := request.HTTPRequest(http.MethodGet, "/workRequests/{workRequestId}/logs")
1197	if err != nil {
1198		return nil, err
1199	}
1200
1201	var response ListWorkRequestLogsResponse
1202	var httpResponse *http.Response
1203	httpResponse, err = client.Call(ctx, &httpRequest)
1204	defer common.CloseBodyIfValid(httpResponse)
1205	response.RawResponse = httpResponse
1206	if err != nil {
1207		return response, err
1208	}
1209
1210	err = common.UnmarshalResponse(httpResponse, &response)
1211	return response, err
1212}
1213
1214// ListWorkRequests Lists the work requests in a compartment.
1215func (client ObjectStorageClient) ListWorkRequests(ctx context.Context, request ListWorkRequestsRequest) (response ListWorkRequestsResponse, err error) {
1216	var ociResponse common.OCIResponse
1217	policy := common.NoRetryPolicy()
1218	if request.RetryPolicy() != nil {
1219		policy = *request.RetryPolicy()
1220	}
1221	ociResponse, err = common.Retry(ctx, request, client.listWorkRequests, policy)
1222	if err != nil {
1223		if ociResponse != nil {
1224			response = ListWorkRequestsResponse{RawResponse: ociResponse.HTTPResponse()}
1225		}
1226		return
1227	}
1228	if convertedResponse, ok := ociResponse.(ListWorkRequestsResponse); ok {
1229		response = convertedResponse
1230	} else {
1231		err = fmt.Errorf("failed to convert OCIResponse into ListWorkRequestsResponse")
1232	}
1233	return
1234}
1235
1236// listWorkRequests implements the OCIOperation interface (enables retrying operations)
1237func (client ObjectStorageClient) listWorkRequests(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
1238	httpRequest, err := request.HTTPRequest(http.MethodGet, "/workRequests")
1239	if err != nil {
1240		return nil, err
1241	}
1242
1243	var response ListWorkRequestsResponse
1244	var httpResponse *http.Response
1245	httpResponse, err = client.Call(ctx, &httpRequest)
1246	defer common.CloseBodyIfValid(httpResponse)
1247	response.RawResponse = httpResponse
1248	if err != nil {
1249		return response, err
1250	}
1251
1252	err = common.UnmarshalResponse(httpResponse, &response)
1253	return response, err
1254}
1255
1256// PutObject Creates a new object or overwrites an existing one. See Special Instructions for Object Storage
1257// PUT (https://docs.cloud.oracle.com/Content/API/Concepts/signingrequests.htm#ObjectStoragePut) for request signature requirements.
1258func (client ObjectStorageClient) PutObject(ctx context.Context, request PutObjectRequest) (response PutObjectResponse, err error) {
1259	var ociResponse common.OCIResponse
1260	policy := common.NoRetryPolicy()
1261	if request.RetryPolicy() != nil {
1262		policy = *request.RetryPolicy()
1263	}
1264	ociResponse, err = common.Retry(ctx, request, client.putObject, policy)
1265	if err != nil {
1266		if ociResponse != nil {
1267			response = PutObjectResponse{RawResponse: ociResponse.HTTPResponse()}
1268		}
1269		return
1270	}
1271	if convertedResponse, ok := ociResponse.(PutObjectResponse); ok {
1272		response = convertedResponse
1273	} else {
1274		err = fmt.Errorf("failed to convert OCIResponse into PutObjectResponse")
1275	}
1276	return
1277}
1278
1279// putObject implements the OCIOperation interface (enables retrying operations)
1280func (client ObjectStorageClient) putObject(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
1281	httpRequest, err := request.HTTPRequest(http.MethodPut, "/n/{namespaceName}/b/{bucketName}/o/{objectName}")
1282	if err != nil {
1283		return nil, err
1284	}
1285
1286	var response PutObjectResponse
1287	var httpResponse *http.Response
1288	var customSigner common.HTTPRequestSigner
1289	excludeBodySigningPredicate := func(r *http.Request) bool { return false }
1290	customSigner, err = common.NewSignerFromOCIRequestSigner(client.Signer, excludeBodySigningPredicate)
1291
1292	//if there was an error overriding the signer, then use the signer from the client itself
1293	if err != nil {
1294		customSigner = client.Signer
1295	}
1296
1297	//Execute the request with a custom signer
1298	httpResponse, err = client.CallWithDetails(ctx, &httpRequest, common.ClientCallDetails{Signer: customSigner})
1299	defer common.CloseBodyIfValid(httpResponse)
1300	response.RawResponse = httpResponse
1301	if err != nil {
1302		return response, err
1303	}
1304
1305	err = common.UnmarshalResponse(httpResponse, &response)
1306	return response, err
1307}
1308
1309// PutObjectLifecyclePolicy Creates or replaces the object lifecycle policy for the bucket.
1310func (client ObjectStorageClient) PutObjectLifecyclePolicy(ctx context.Context, request PutObjectLifecyclePolicyRequest) (response PutObjectLifecyclePolicyResponse, err error) {
1311	var ociResponse common.OCIResponse
1312	policy := common.NoRetryPolicy()
1313	if request.RetryPolicy() != nil {
1314		policy = *request.RetryPolicy()
1315	}
1316	ociResponse, err = common.Retry(ctx, request, client.putObjectLifecyclePolicy, policy)
1317	if err != nil {
1318		if ociResponse != nil {
1319			response = PutObjectLifecyclePolicyResponse{RawResponse: ociResponse.HTTPResponse()}
1320		}
1321		return
1322	}
1323	if convertedResponse, ok := ociResponse.(PutObjectLifecyclePolicyResponse); ok {
1324		response = convertedResponse
1325	} else {
1326		err = fmt.Errorf("failed to convert OCIResponse into PutObjectLifecyclePolicyResponse")
1327	}
1328	return
1329}
1330
1331// putObjectLifecyclePolicy implements the OCIOperation interface (enables retrying operations)
1332func (client ObjectStorageClient) putObjectLifecyclePolicy(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
1333	httpRequest, err := request.HTTPRequest(http.MethodPut, "/n/{namespaceName}/b/{bucketName}/l")
1334	if err != nil {
1335		return nil, err
1336	}
1337
1338	var response PutObjectLifecyclePolicyResponse
1339	var httpResponse *http.Response
1340	httpResponse, err = client.Call(ctx, &httpRequest)
1341	defer common.CloseBodyIfValid(httpResponse)
1342	response.RawResponse = httpResponse
1343	if err != nil {
1344		return response, err
1345	}
1346
1347	err = common.UnmarshalResponse(httpResponse, &response)
1348	return response, err
1349}
1350
1351// ReencryptBucket Reencrypts the data encryption key of the bucket and objects in the bucket. This is an asynchronous call, the
1352// system will start a work request task to reencrypt the data encryption key of the objects and chunks in the bucket.
1353// Only the objects created before the time the API call will be reencrypted. The call can take long time depending
1354// on how many objects in the bucket and how big the objects are. This API will return a work request id, so the user
1355// can use this id to retrieve the status of the work request task.
1356// A user can update kmsKeyId of the bucket, and then call this API, so the data encryption key of the bucket and
1357// objects in the bucket will be reencryped by the new kmsKeyId. Note that the system doesn't maintain what
1358// ksmKeyId is used to encrypt the object, the user has to maintain the mapping if they want.
1359func (client ObjectStorageClient) ReencryptBucket(ctx context.Context, request ReencryptBucketRequest) (response ReencryptBucketResponse, err error) {
1360	var ociResponse common.OCIResponse
1361	policy := common.NoRetryPolicy()
1362	if request.RetryPolicy() != nil {
1363		policy = *request.RetryPolicy()
1364	}
1365	ociResponse, err = common.Retry(ctx, request, client.reencryptBucket, policy)
1366	if err != nil {
1367		if ociResponse != nil {
1368			response = ReencryptBucketResponse{RawResponse: ociResponse.HTTPResponse()}
1369		}
1370		return
1371	}
1372	if convertedResponse, ok := ociResponse.(ReencryptBucketResponse); ok {
1373		response = convertedResponse
1374	} else {
1375		err = fmt.Errorf("failed to convert OCIResponse into ReencryptBucketResponse")
1376	}
1377	return
1378}
1379
1380// reencryptBucket implements the OCIOperation interface (enables retrying operations)
1381func (client ObjectStorageClient) reencryptBucket(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
1382	httpRequest, err := request.HTTPRequest(http.MethodPost, "/n/{namespaceName}/b/{bucketName}/actions/reencrypt")
1383	if err != nil {
1384		return nil, err
1385	}
1386
1387	var response ReencryptBucketResponse
1388	var httpResponse *http.Response
1389	httpResponse, err = client.Call(ctx, &httpRequest)
1390	defer common.CloseBodyIfValid(httpResponse)
1391	response.RawResponse = httpResponse
1392	if err != nil {
1393		return response, err
1394	}
1395
1396	err = common.UnmarshalResponse(httpResponse, &response)
1397	return response, err
1398}
1399
1400// RenameObject Rename an object in the given Object Storage namespace.
1401func (client ObjectStorageClient) RenameObject(ctx context.Context, request RenameObjectRequest) (response RenameObjectResponse, err error) {
1402	var ociResponse common.OCIResponse
1403	policy := common.NoRetryPolicy()
1404	if request.RetryPolicy() != nil {
1405		policy = *request.RetryPolicy()
1406	}
1407	ociResponse, err = common.Retry(ctx, request, client.renameObject, policy)
1408	if err != nil {
1409		if ociResponse != nil {
1410			response = RenameObjectResponse{RawResponse: ociResponse.HTTPResponse()}
1411		}
1412		return
1413	}
1414	if convertedResponse, ok := ociResponse.(RenameObjectResponse); ok {
1415		response = convertedResponse
1416	} else {
1417		err = fmt.Errorf("failed to convert OCIResponse into RenameObjectResponse")
1418	}
1419	return
1420}
1421
1422// renameObject implements the OCIOperation interface (enables retrying operations)
1423func (client ObjectStorageClient) renameObject(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
1424	httpRequest, err := request.HTTPRequest(http.MethodPost, "/n/{namespaceName}/b/{bucketName}/actions/renameObject")
1425	if err != nil {
1426		return nil, err
1427	}
1428
1429	var response RenameObjectResponse
1430	var httpResponse *http.Response
1431	httpResponse, err = client.Call(ctx, &httpRequest)
1432	defer common.CloseBodyIfValid(httpResponse)
1433	response.RawResponse = httpResponse
1434	if err != nil {
1435		return response, err
1436	}
1437
1438	err = common.UnmarshalResponse(httpResponse, &response)
1439	return response, err
1440}
1441
1442// RestoreObjects Restores one or more objects specified by the objectName parameter.
1443// By default objects will be restored for 24 hours. Duration can be configured using the hours parameter.
1444func (client ObjectStorageClient) RestoreObjects(ctx context.Context, request RestoreObjectsRequest) (response RestoreObjectsResponse, err error) {
1445	var ociResponse common.OCIResponse
1446	policy := common.NoRetryPolicy()
1447	if request.RetryPolicy() != nil {
1448		policy = *request.RetryPolicy()
1449	}
1450	ociResponse, err = common.Retry(ctx, request, client.restoreObjects, policy)
1451	if err != nil {
1452		if ociResponse != nil {
1453			response = RestoreObjectsResponse{RawResponse: ociResponse.HTTPResponse()}
1454		}
1455		return
1456	}
1457	if convertedResponse, ok := ociResponse.(RestoreObjectsResponse); ok {
1458		response = convertedResponse
1459	} else {
1460		err = fmt.Errorf("failed to convert OCIResponse into RestoreObjectsResponse")
1461	}
1462	return
1463}
1464
1465// restoreObjects implements the OCIOperation interface (enables retrying operations)
1466func (client ObjectStorageClient) restoreObjects(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
1467	httpRequest, err := request.HTTPRequest(http.MethodPost, "/n/{namespaceName}/b/{bucketName}/actions/restoreObjects")
1468	if err != nil {
1469		return nil, err
1470	}
1471
1472	var response RestoreObjectsResponse
1473	var httpResponse *http.Response
1474	httpResponse, err = client.Call(ctx, &httpRequest)
1475	defer common.CloseBodyIfValid(httpResponse)
1476	response.RawResponse = httpResponse
1477	if err != nil {
1478		return response, err
1479	}
1480
1481	err = common.UnmarshalResponse(httpResponse, &response)
1482	return response, err
1483}
1484
1485// UpdateBucket Performs a partial or full update of a bucket's user-defined metadata.
1486// Use UpdateBucket to move a bucket from one compartment to another within the same tenancy. Supply the compartmentID
1487// of the compartment that you want to move the bucket to. For more information about moving resources between compartments,
1488// see Moving Resources to a Different Compartment (https://docs.cloud.oracle.com/iaas/Content/Identity/Tasks/managingcompartments.htm#moveRes).
1489func (client ObjectStorageClient) UpdateBucket(ctx context.Context, request UpdateBucketRequest) (response UpdateBucketResponse, err error) {
1490	var ociResponse common.OCIResponse
1491	policy := common.NoRetryPolicy()
1492	if request.RetryPolicy() != nil {
1493		policy = *request.RetryPolicy()
1494	}
1495	ociResponse, err = common.Retry(ctx, request, client.updateBucket, policy)
1496	if err != nil {
1497		if ociResponse != nil {
1498			response = UpdateBucketResponse{RawResponse: ociResponse.HTTPResponse()}
1499		}
1500		return
1501	}
1502	if convertedResponse, ok := ociResponse.(UpdateBucketResponse); ok {
1503		response = convertedResponse
1504	} else {
1505		err = fmt.Errorf("failed to convert OCIResponse into UpdateBucketResponse")
1506	}
1507	return
1508}
1509
1510// updateBucket implements the OCIOperation interface (enables retrying operations)
1511func (client ObjectStorageClient) updateBucket(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
1512	httpRequest, err := request.HTTPRequest(http.MethodPost, "/n/{namespaceName}/b/{bucketName}")
1513	if err != nil {
1514		return nil, err
1515	}
1516
1517	var response UpdateBucketResponse
1518	var httpResponse *http.Response
1519	httpResponse, err = client.Call(ctx, &httpRequest)
1520	defer common.CloseBodyIfValid(httpResponse)
1521	response.RawResponse = httpResponse
1522	if err != nil {
1523		return response, err
1524	}
1525
1526	err = common.UnmarshalResponse(httpResponse, &response)
1527	return response, err
1528}
1529
1530// UpdateNamespaceMetadata By default, buckets created using the Amazon S3 Compatibility API or the Swift API are created in the root
1531// compartment of the Oracle Cloud Infrastructure tenancy.
1532// You can change the default Swift/Amazon S3 compartmentId designation to a different compartmentId. All
1533// subsequent bucket creations will use the new default compartment, but no previously created
1534// buckets will be modified. A user must have OBJECTSTORAGE_NAMESPACE_UPDATE permission to make changes to the default
1535// compartments for Amazon S3 and Swift.
1536func (client ObjectStorageClient) UpdateNamespaceMetadata(ctx context.Context, request UpdateNamespaceMetadataRequest) (response UpdateNamespaceMetadataResponse, err error) {
1537	var ociResponse common.OCIResponse
1538	policy := common.NoRetryPolicy()
1539	if request.RetryPolicy() != nil {
1540		policy = *request.RetryPolicy()
1541	}
1542	ociResponse, err = common.Retry(ctx, request, client.updateNamespaceMetadata, policy)
1543	if err != nil {
1544		if ociResponse != nil {
1545			response = UpdateNamespaceMetadataResponse{RawResponse: ociResponse.HTTPResponse()}
1546		}
1547		return
1548	}
1549	if convertedResponse, ok := ociResponse.(UpdateNamespaceMetadataResponse); ok {
1550		response = convertedResponse
1551	} else {
1552		err = fmt.Errorf("failed to convert OCIResponse into UpdateNamespaceMetadataResponse")
1553	}
1554	return
1555}
1556
1557// updateNamespaceMetadata implements the OCIOperation interface (enables retrying operations)
1558func (client ObjectStorageClient) updateNamespaceMetadata(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
1559	httpRequest, err := request.HTTPRequest(http.MethodPut, "/n/{namespaceName}")
1560	if err != nil {
1561		return nil, err
1562	}
1563
1564	var response UpdateNamespaceMetadataResponse
1565	var httpResponse *http.Response
1566	httpResponse, err = client.Call(ctx, &httpRequest)
1567	defer common.CloseBodyIfValid(httpResponse)
1568	response.RawResponse = httpResponse
1569	if err != nil {
1570		return response, err
1571	}
1572
1573	err = common.UnmarshalResponse(httpResponse, &response)
1574	return response, err
1575}
1576
1577// UploadPart Uploads a single part of a multipart upload.
1578func (client ObjectStorageClient) UploadPart(ctx context.Context, request UploadPartRequest) (response UploadPartResponse, err error) {
1579	var ociResponse common.OCIResponse
1580	policy := common.NoRetryPolicy()
1581	if request.RetryPolicy() != nil {
1582		policy = *request.RetryPolicy()
1583	}
1584	ociResponse, err = common.Retry(ctx, request, client.uploadPart, policy)
1585	if err != nil {
1586		if ociResponse != nil {
1587			response = UploadPartResponse{RawResponse: ociResponse.HTTPResponse()}
1588		}
1589		return
1590	}
1591	if convertedResponse, ok := ociResponse.(UploadPartResponse); ok {
1592		response = convertedResponse
1593	} else {
1594		err = fmt.Errorf("failed to convert OCIResponse into UploadPartResponse")
1595	}
1596	return
1597}
1598
1599// uploadPart implements the OCIOperation interface (enables retrying operations)
1600func (client ObjectStorageClient) uploadPart(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
1601	httpRequest, err := request.HTTPRequest(http.MethodPut, "/n/{namespaceName}/b/{bucketName}/u/{objectName}")
1602	if err != nil {
1603		return nil, err
1604	}
1605
1606	var response UploadPartResponse
1607	var httpResponse *http.Response
1608	var customSigner common.HTTPRequestSigner
1609	excludeBodySigningPredicate := func(r *http.Request) bool { return false }
1610	customSigner, err = common.NewSignerFromOCIRequestSigner(client.Signer, excludeBodySigningPredicate)
1611
1612	//if there was an error overriding the signer, then use the signer from the client itself
1613	if err != nil {
1614		customSigner = client.Signer
1615	}
1616
1617	//Execute the request with a custom signer
1618	httpResponse, err = client.CallWithDetails(ctx, &httpRequest, common.ClientCallDetails{Signer: customSigner})
1619	defer common.CloseBodyIfValid(httpResponse)
1620	response.RawResponse = httpResponse
1621	if err != nil {
1622		return response, err
1623	}
1624
1625	err = common.UnmarshalResponse(httpResponse, &response)
1626	return response, err
1627}
1628