Skip to content

Commit 7abd49a

Browse files
authored
refactor: xml content type header renderer to be overridable (#977)
1 parent 0409317 commit 7abd49a

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

codegen/smithy-kotlin-codegen/src/main/kotlin/software/amazon/smithy/kotlin/codegen/model/ShapeExt.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import software.amazon.smithy.rulesengine.language.EndpointRuleSet
2121
import software.amazon.smithy.rulesengine.traits.EndpointRuleSetTrait
2222
import software.amazon.smithy.rulesengine.traits.EndpointTestCase
2323
import software.amazon.smithy.rulesengine.traits.EndpointTestsTrait
24-
import kotlin.streams.toList
2524

2625
/**
2726
* Get all shapes of a particular type from the model.
@@ -193,6 +192,15 @@ val Shape.isSparse: Boolean
193192
val Shape.isStreaming: Boolean
194193
get() = hasTrait<StreamingTrait>()
195194

195+
/**
196+
* Returns boolean indicating if operations explicitly set HTTP payload is a union
197+
*/
198+
fun OperationShape.payloadIsUnionShape(model: Model): Boolean {
199+
val requestShape = model.expectShape<StructureShape>(input.get())
200+
val payload = requestShape.findMemberWithTrait<HttpPayloadTrait>(model)?.targetOrSelf(model)
201+
return payload is UnionShape
202+
}
203+
196204
/**
197205
* Test if a member targets an event stream
198206
*/

codegen/smithy-kotlin-codegen/src/main/kotlin/software/amazon/smithy/kotlin/codegen/rendering/protocol/HttpBindingProtocolGenerator.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@ import software.amazon.smithy.kotlin.codegen.core.*
1212
import software.amazon.smithy.kotlin.codegen.lang.KotlinTypes
1313
import software.amazon.smithy.kotlin.codegen.lang.toEscapedLiteral
1414
import software.amazon.smithy.kotlin.codegen.model.*
15-
import software.amazon.smithy.kotlin.codegen.rendering.serde.*
15+
import software.amazon.smithy.kotlin.codegen.rendering.serde.deserializerName
16+
import software.amazon.smithy.kotlin.codegen.rendering.serde.formatInstant
17+
import software.amazon.smithy.kotlin.codegen.rendering.serde.parseInstant
18+
import software.amazon.smithy.kotlin.codegen.rendering.serde.serializerName
1619
import software.amazon.smithy.kotlin.codegen.utils.getOrNull
1720
import software.amazon.smithy.model.Model
1821
import software.amazon.smithy.model.knowledge.HttpBinding
@@ -267,7 +270,15 @@ abstract class HttpBindingProtocolGenerator : ProtocolGenerator {
267270
writer.write("val payload = #T(context, input)", opBodySerializerFn)
268271
writer.write("builder.body = #T.fromBytes(payload)", RuntimeTypes.Http.HttpBody)
269272
}
273+
renderContentTypeHeader(ctx, op, writer, resolver)
274+
}
270275

276+
protected open fun renderContentTypeHeader(
277+
ctx: ProtocolGenerator.GenerationContext,
278+
op: OperationShape,
279+
writer: KotlinWriter,
280+
resolver: HttpBindingResolver = getProtocolHttpBindingResolver(ctx.model, ctx.service),
281+
) {
271282
resolver.determineRequestContentType(op)?.let { contentType ->
272283
writer.withBlock("if (builder.body !is HttpBody.Empty) {", "}") {
273284
write("builder.headers.setMissing(\"Content-Type\", #S)", contentType)

0 commit comments

Comments
 (0)