Skip to content

Commit b2b0d8d

Browse files
brennanMKEroyjit
authored andcommitted
chore(storage): adds listParts support to support debugging (#103)
1 parent d2bb150 commit b2b0d8d

File tree

4 files changed

+81
-0
lines changed

4 files changed

+81
-0
lines changed

AmplifyPlugins/Storage/AWSS3StoragePlugin/Dependency/AWSS3Adapter.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,22 @@ class AWSS3Adapter: AWSS3Behavior {
100100
}
101101
}
102102
}
103+
104+
func listParts(bucket: String, key: String, uploadId: UploadID, completion: @escaping (Result<AWSS3ListUploadPartResponse, StorageError>) -> Void) {
105+
let input = ListPartsInput(bucket: bucket, key: key, uploadId: uploadId)
106+
awsS3.listParts(input: input) { result in
107+
switch result {
108+
case .success(let sdkResponse):
109+
guard let response = AWSS3ListUploadPartResponse(response: sdkResponse) else {
110+
completion(.failure(StorageError.unknown("ListParts response is invalid", nil)))
111+
return
112+
}
113+
completion(.success(response))
114+
case .failure(let error):
115+
completion(.failure(error.storageError))
116+
}
117+
}
118+
}
103119

104120
/// Completed a MultipartUpload
105121
/// - Parameters:

AmplifyPlugins/Storage/AWSS3StoragePlugin/Dependency/AWSS3Behavior.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ protocol AWSS3Behavior {
2525
// Creates a Multipart Upload.
2626
func createMultipartUpload(_ request: CreateMultipartUploadRequest, completion: @escaping (Result<AWSS3CreateMultipartUploadResponse, StorageError>) -> Void)
2727

28+
// Get list of uploaded parts (supports development)
29+
func listParts(bucket: String, key: String, uploadId: UploadID, completion: @escaping (SdkResult<ListPartsOutputResponse, ListPartsOutputError>) -> Void)
30+
2831
// Completes a Multipart Upload.
2932
func completeMultipartUpload(_ request: AWSS3CompleteMultipartUploadRequest, completion: @escaping (Result<AWSS3CompleteMultipartUploadResponse, StorageError>) -> Void)
3033

@@ -35,3 +38,9 @@ protocol AWSS3Behavior {
3538
func getS3() -> S3Client
3639

3740
}
41+
42+
extension AWSS3Behavior {
43+
func listParts(bucket: String, key: String, uploadId: UploadID, completion: @escaping (SdkResult<ListPartsOutputResponse, ListPartsOutputError>) -> Void) {
44+
// do nothing
45+
}
46+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
//
2+
// Copyright Amazon.com Inc. or its affiliates.
3+
// All Rights Reserved.
4+
//
5+
// SPDX-License-Identifier: Apache-2.0
6+
//
7+
8+
import Foundation
9+
10+
import Amplify
11+
import AWSS3
12+
13+
struct AWSS3ListUploadPartResponse {
14+
let bucket: String
15+
let key: String
16+
let uploadId: String
17+
let parts: AWSS3MultipartUploadRequestCompletedParts
18+
19+
init(bucket: String,
20+
key: String,
21+
uploadId: String,
22+
parts: AWSS3MultipartUploadRequestCompletedParts) {
23+
self.bucket = bucket
24+
self.key = key
25+
self.uploadId = uploadId
26+
self.parts = parts
27+
}
28+
}
29+
30+
extension AWSS3ListUploadPartResponse {
31+
32+
init?(response: ListPartsOutputResponse) {
33+
guard let bucket = response.bucket,
34+
let key = response.key,
35+
let uploadId = response.uploadId,
36+
let parts = response.parts else {
37+
return nil
38+
}
39+
self.bucket = bucket
40+
self.key = key
41+
self.uploadId = uploadId
42+
self.parts = AWSS3MultipartUploadRequestCompletedParts(parts: parts)
43+
}
44+
45+
}

AmplifyPlugins/Storage/AWSS3StoragePlugin/Dependency/AWSS3MultipartUploadRequestCompletedPart.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
import Foundation
99

10+
import AWSS3
11+
1012
struct AWSS3MultipartUploadRequestCompletedPart {
1113
let partNumber: Int
1214
let eTag: String
@@ -29,4 +31,13 @@ extension AWSS3MultipartUploadRequestCompletedParts {
2931
self = parts
3032
}
3133

34+
init(parts: [S3ClientTypes.Part]) {
35+
self = parts.compactMap {
36+
guard let eTag = $0.eTag else {
37+
return nil
38+
}
39+
return AWSS3MultipartUploadRequestCompletedPart(partNumber: $0.partNumber, eTag: eTag)
40+
}
41+
}
42+
3243
}

0 commit comments

Comments
 (0)