Skip to content

Commit 4ef1f2a

Browse files
authored
fix: streaming response (#273)
1 parent 4b8a71c commit 4ef1f2a

File tree

10 files changed

+38
-39
lines changed

10 files changed

+38
-39
lines changed

AWSClientRuntime/Sources/Protocols/RestJSON/RestJSONError.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ public struct RestJSONError {
2828

2929
var type = httpResponse.headers.value(for: X_AMZN_ERROR_TYPE_HEADER_NAME)
3030

31-
if case .data(let data) = httpResponse.body,
32-
let unwrappedData = data {
33-
let output: RestJSONErrorPayload = try JSONDecoder().decode(responseBody: unwrappedData)
31+
if case .stream(let reader) = httpResponse.body {
32+
let data = reader.toBytes().toData()
33+
let output: RestJSONErrorPayload = try JSONDecoder().decode(responseBody: data)
3434
if message == nil {
3535
message = output.resolvedErrorMessage
3636
}

AWSClientRuntime/Sources/Protocols/RestXML/RestXMLError.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ public struct RestXMLError {
1212
public let requestId: String?
1313
public let message: String?
1414
public init(httpResponse: HttpResponse) throws {
15-
if case .data(let data) = httpResponse.body,
16-
let responseBody = data {
15+
if case .stream(let reader) = httpResponse.body {
16+
let responseBody = reader.toBytes().toData()
1717
do {
1818
let decoded: ErrorResponseContainer<RestXMLErrorPayload> = try XMLDecoder().decode(responseBody: responseBody)
1919
self.errorCode = decoded.error.errorCode

AWSClientRuntime/Tests/Protocols/RestXML/Models/Errors/ComplexXMLError+ResponseInit.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ extension ComplexXMLError: AWSHttpServiceError {
1818
self.header = nil
1919
}
2020

21-
if case .data(let data) = httpResponse.body,
22-
let unwrappedData = data,
21+
if case .stream(let reader) = httpResponse.body,
2322
let responseDecoder = decoder {
24-
let output: ErrorResponseContainer<ComplexXMLErrorBody> = try responseDecoder.decode(responseBody: unwrappedData)
23+
let data = reader.toBytes().toData()
24+
let output: ErrorResponseContainer<ComplexXMLErrorBody> = try responseDecoder.decode(responseBody: data)
2525
self.nested = output.error.nested
2626
self.topLevel = output.error.topLevel
2727
} else {

AWSClientRuntime/Tests/Protocols/RestXML/Models/Errors/ComplexXMLErrorNoErrorWrapping+Init.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ extension ComplexXMLErrorNoErrorWrapping: AWSHttpServiceError {
1717
} else {
1818
self.header = nil
1919
}
20-
if case .data(let data) = httpResponse.body,
21-
let unwrappedData = data,
20+
if case .stream(let reader) = httpResponse.body,
2221
let responseDecoder = decoder {
23-
let output: ComplexXMLErrorNoErrorWrappingBody = try responseDecoder.decode(responseBody: unwrappedData)
22+
let data = reader.toBytes().toData()
23+
let output: ComplexXMLErrorNoErrorWrappingBody = try responseDecoder.decode(responseBody: data)
2424
self.nested = output.nested
2525
self.topLevel = output.topLevel
2626
} else {

AWSClientRuntime/Tests/Protocols/RestXML/Models/Errors/InvalidGreeting+ResponseInit.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ import ClientRuntime
1313
extension InvalidGreeting: AWSHttpServiceError {
1414
public init (httpResponse: HttpResponse, decoder: ResponseDecoder? = nil, message: String? = nil, requestID: String? = nil) throws {
1515

16-
if case .data(let data) = httpResponse.body,
17-
let unwrappedData = data,
16+
if case .stream(let reader) = httpResponse.body,
1817
let responseDecoder = decoder {
19-
let output: InvalidGreetingBody = try responseDecoder.decode(responseBody: unwrappedData)
18+
let data = reader.toBytes().toData()
19+
let output: InvalidGreetingBody = try responseDecoder.decode(responseBody: data)
2020
self.message = output.message
2121
} else {
2222
self.message = nil

AWSClientRuntime/Tests/Protocols/RestXML/RestXMLErrorTests.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class RestXMLErrorTests: HttpResponseTestBase {
2121
headers: [
2222
"Content-Type": "application/xml"
2323
],
24-
content: HttpBody.data("""
24+
content: HttpBody.stream(ByteStream.from(data:"""
2525
<ErrorResponse>
2626
<Error>
2727
<Type>Sender</Type>
@@ -32,7 +32,7 @@ class RestXMLErrorTests: HttpResponseTestBase {
3232
<RequestId>foo-id</RequestId>
3333
</ErrorResponse>
3434
35-
""".data(using: .utf8)),
35+
""".data(using: .utf8)!)),
3636
host: host
3737
) else {
3838
XCTFail("Something is wrong with the created http response")
@@ -67,7 +67,7 @@ class RestXMLErrorTests: HttpResponseTestBase {
6767
"Content-Type": "application/xml",
6868
"X-Header": "Header"
6969
],
70-
content: HttpBody.data("""
70+
content: HttpBody.stream(ByteStream.from(data:"""
7171
<ErrorResponse>
7272
<Error>
7373
<Type>Sender</Type>
@@ -81,7 +81,7 @@ class RestXMLErrorTests: HttpResponseTestBase {
8181
<RequestId>foo-id</RequestId>
8282
</ErrorResponse>
8383
84-
""".data(using: .utf8)),
84+
""".data(using: .utf8)!)),
8585
host: host
8686
) else {
8787
XCTFail("Something is wrong with the created http response")
@@ -123,7 +123,7 @@ class RestXMLErrorTests: HttpResponseTestBase {
123123
"Content-Type": "application/xml",
124124
"X-Header": "Header"
125125
],
126-
content: HttpBody.data("""
126+
content: HttpBody.stream(ByteStream.from(data:"""
127127
<Error>
128128
<Type>Sender</Type>
129129
<Code>ComplexXMLErrorNoErrorWrapping</Code>
@@ -134,7 +134,7 @@ class RestXMLErrorTests: HttpResponseTestBase {
134134
</Nested>
135135
<RequestId>foo-id</RequestId>
136136
</Error>
137-
""".data(using: .utf8)),
137+
""".data(using: .utf8)!)),
138138
host: host
139139
) else {
140140
XCTFail("Something is wrong with the created http response")
@@ -176,15 +176,15 @@ class RestXMLErrorTests: HttpResponseTestBase {
176176
"Content-Type": "application/xml",
177177
"X-Header": "Header"
178178
],
179-
content: HttpBody.data("""
179+
content: HttpBody.stream(ByteStream.from(data:"""
180180
<?xml version="1.0" encoding="UTF-8"?>
181181
<Error>
182182
<Code>AccessDenied</Code>
183183
<Message>Access Denied</Message>
184184
<RequestId>abcdefg123456</RequestId>
185185
<HostId>987654321abcdefg</HostId>
186186
</Error>
187-
""".data(using: .utf8)),
187+
""".data(using: .utf8)!)),
188188
host: host
189189
) else {
190190
XCTFail("Something is wrong with the created http response")

codegen/smithy-aws-swift-codegen/src/main/kotlin/software/amazon/smithy/aws/swift/codegen/ec2query/httpResponse/AWSEc2QueryHttpResponseTraitWithoutPayload.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,10 @@ class AWSEc2QueryHttpResponseTraitWithoutPayload(
3030
.toMutableSet()
3131

3232
if (bodyMembersWithoutQueryTrait.isNotEmpty()) {
33-
writer.write("if case .data(let data) = httpResponse.body,")
33+
writer.write("if case .stream(let reader) = httpResponse.body,")
3434
writer.indent()
35-
writer.write("let unwrappedData = data,")
3635
writer.write("let responseDecoder = decoder {")
37-
36+
writer.write("let data = reader.toBytes().toData()")
3837
renderWithoutErrorResponseContainer(outputShapeName, bodyMembersWithoutQueryTrait)
3938

4039
writer.dedent()
@@ -59,7 +58,7 @@ class AWSEc2QueryHttpResponseTraitWithoutPayload(
5958
}
6059

6160
fun renderWithoutErrorResponseContainer(outputShapeName: String, bodyMembersWithoutQueryTrait: Set<String>) {
62-
writer.write("let output: Ec2NarrowedResponse<${outputShapeName}Body> = try responseDecoder.decode(responseBody: unwrappedData)")
61+
writer.write("let output: Ec2NarrowedResponse<${outputShapeName}Body> = try responseDecoder.decode(responseBody: data)")
6362
bodyMembersWithoutQueryTrait.sorted().forEach {
6463
writer.write("self.$it = output.errors.error.$it")
6564
}

codegen/smithy-aws-swift-codegen/src/main/kotlin/software/amazon/smithy/aws/swift/codegen/restxml/httpResponse/AWSXMLHttpResponseTraitWithoutPayload.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,10 @@ class AWSXMLHttpResponseTraitWithoutPayload(
3232
.toMutableSet()
3333

3434
if (bodyMembersWithoutQueryTrait.isNotEmpty()) {
35-
writer.write("if case .data(let data) = httpResponse.body,")
35+
writer.write("if case .stream(let reader) = httpResponse.body,")
3636
writer.indent()
37-
writer.write("let unwrappedData = data,")
3837
writer.write("let responseDecoder = decoder {")
38+
writer.write("let data = reader.toBytes().toData()")
3939
if (serviceDisablesWrappingOfErrorProperties()) {
4040
renderWithoutErrorResponseContainer(outputShapeName, bodyMembersWithoutQueryTrait)
4141
} else {
@@ -70,14 +70,14 @@ class AWSXMLHttpResponseTraitWithoutPayload(
7070
}
7171

7272
fun renderWithoutErrorResponseContainer(outputShapeName: String, bodyMembersWithoutQueryTrait: Set<String>) {
73-
writer.write("let output: ${outputShapeName}Body = try responseDecoder.decode(responseBody: unwrappedData)")
73+
writer.write("let output: ${outputShapeName}Body = try responseDecoder.decode(responseBody: data)")
7474
bodyMembersWithoutQueryTrait.sorted().forEach {
7575
writer.write("self.$it = output.$it")
7676
}
7777
}
7878

7979
fun renderWithErrorResponseContainer(outputShapeName: String, bodyMembersWithoutQueryTrait: Set<String>) {
80-
writer.write("let output: ErrorResponseContainer<${outputShapeName}Body> = try responseDecoder.decode(responseBody: unwrappedData)")
80+
writer.write("let output: ErrorResponseContainer<${outputShapeName}Body> = try responseDecoder.decode(responseBody: data)")
8181
bodyMembersWithoutQueryTrait.sorted().forEach {
8282
writer.write("self.$it = output.error.$it")
8383
}

codegen/smithy-aws-swift-codegen/src/test/kotlin/software/amazon/smithy/aws/swift/codegen/ec2query/Ec2QueryHttpResponseBindingErrorGeneratorTests.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,10 @@ class Ec2QueryHttpResponseBindingErrorGeneratorTests {
6161
"""
6262
extension ComplexError: AWSHttpServiceError {
6363
public init (httpResponse: HttpResponse, decoder: ResponseDecoder? = nil, message: String? = nil, requestID: String? = nil) throws {
64-
if case .data(let data) = httpResponse.body,
65-
let unwrappedData = data,
64+
if case .stream(let reader) = httpResponse.body,
6665
let responseDecoder = decoder {
67-
let output: Ec2NarrowedResponse<ComplexErrorBody> = try responseDecoder.decode(responseBody: unwrappedData)
66+
let data = reader.toBytes().toData()
67+
let output: Ec2NarrowedResponse<ComplexErrorBody> = try responseDecoder.decode(responseBody: data)
6868
self.nested = output.errors.error.nested
6969
self.topLevel = output.errors.error.topLevel
7070
} else {

codegen/smithy-aws-swift-codegen/src/test/kotlin/software/amazon/smithy/aws/swift/codegen/restxml/AWSRestXMLHttpResponseBindingErrorGeneratorTests.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,10 @@ class AWSRestXMLHttpResponseBindingErrorGeneratorTests {
6666
} else {
6767
self.header = nil
6868
}
69-
if case .data(let data) = httpResponse.body,
70-
let unwrappedData = data,
69+
if case .stream(let reader) = httpResponse.body,
7170
let responseDecoder = decoder {
72-
let output: ErrorResponseContainer<ComplexXMLErrorBody> = try responseDecoder.decode(responseBody: unwrappedData)
71+
let data = reader.toBytes().toData()
72+
let output: ErrorResponseContainer<ComplexXMLErrorBody> = try responseDecoder.decode(responseBody: data)
7373
self.nested = output.error.nested
7474
self.topLevel = output.error.topLevel
7575
} else {
@@ -100,10 +100,10 @@ class AWSRestXMLHttpResponseBindingErrorGeneratorTests {
100100
} else {
101101
self.header = nil
102102
}
103-
if case .data(let data) = httpResponse.body,
104-
let unwrappedData = data,
103+
if case .stream(let reader) = httpResponse.body,
105104
let responseDecoder = decoder {
106-
let output: ComplexXMLErrorNoErrorWrappingBody = try responseDecoder.decode(responseBody: unwrappedData)
105+
let data = reader.toBytes().toData()
106+
let output: ComplexXMLErrorNoErrorWrappingBody = try responseDecoder.decode(responseBody: data)
107107
self.nested = output.nested
108108
self.topLevel = output.topLevel
109109
} else {

0 commit comments

Comments
 (0)