Passed
Pull Request — master (#13)
by eval
01:53
created

s3/client_xapi_object.go   A

Size/Duplication

Total Lines 75
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
cc 12
eloc 45
dl 0
loc 75
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
B s3.*S3.XDeleteAllObjects 0 19 6
A s3.*S3.XPutObjectToPath 0 5 1
A s3.*S3.XGetObjectFromPath 0 4 1
A s3.*S3.XDeleteObjectFromPath 0 4 1
A s3.*S3.XGetPresignURL 0 7 1
A s3.*S3.XExistObject 0 9 2
1
package s3
2
3
import (
4
	"context"
5
	"time"
6
)
7
8
// XDeleteAllObjects deletes all of objects in the bucket.
9
func (svc *S3) XDeleteAllObjects(ctx context.Context, bucket string) (deletedCount int, err error) {
10
	count := 0
11
	for {
12
		result, err := svc.ListObjectsV2(ctx, ListObjectsRequest{
13
			Bucket: bucket,
14
		})
15
		if err != nil {
16
			return 0, err
17
		}
18
		for _, obj := range result.Contents {
19
			_, err := svc.XDeleteObjectFromPath(ctx, bucket, obj.Key)
20
			if err != nil {
21
				return 0, err
22
			}
23
			count++
24
		}
25
26
		if !result.IsTruncated {
27
			return count, nil
28
		}
29
	}
30
}
31
32
// XDeleteObjectFromPath deletes an object from `path`.
33
func (svc *S3) XDeleteObjectFromPath(ctx context.Context, bucket, path string) (*DeleteObjectResult, error) {
34
	return svc.DeleteObject(ctx, DeleteObjectRequest{
35
		Bucket: bucket,
36
		Key:    path,
37
	})
38
}
39
40
// XExistObject checks if the object exists or not.
41
func (svc *S3) XExistObject(ctx context.Context, bucket, path string) (bool, error) {
42
	res, err := svc.HeadObject(ctx, HeadObjectRequest{
43
		Bucket: bucket,
44
		Key:    path,
45
	})
46
	if err != nil {
47
		return false, err
48
	}
49
	return res.Exists, nil
50
}
51
52
// XGetObjectFromPath gets an object from `path`.
53
func (svc *S3) XGetObjectFromPath(ctx context.Context, bucket, path string) (*GetObjectResult, error) {
54
	return svc.GetObject(ctx, GetObjectRequest{
55
		Bucket: bucket,
56
		Key:    path,
57
	})
58
}
59
60
// XGetPresignURL gets an presigned url of the object for GET.
61
func (svc *S3) XGetPresignURL(ctx context.Context, bucket, path string, dur time.Duration) (string, error) {
62
	in := GetObjectRequest{
63
		Bucket: bucket,
64
		Key:    path,
65
	}.ToInput()
66
	r := svc.client.GetObjectRequest(in)
67
	return r.Presign(dur)
68
}
69
70
// XPutObjectToPath puts an object to the `path` and bytes data.
71
func (svc *S3) XPutObjectToPath(ctx context.Context, bucket, path string, data []byte) (*PutObjectResult, error) {
72
	return svc.PutObject(ctx, PutObjectRequest{
73
		Bucket:    bucket,
74
		Key:       path,
75
		BodyBytes: data,
76
	})
77
}
78