Skip to content

Commit e7bb219

Browse files
authored
refactor: cleanup public symbols and rename transform package (#971)
1 parent af125b7 commit e7bb219

File tree

44 files changed

+156
-179
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+156
-179
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"id": "40f4af9b-316c-4d95-a4d4-9b7787feba1d",
3+
"type": "misc",
4+
"description": "Refactor codegen to place serialization and deserialization code into the `serde` package rather than the `transform` package."
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"id": "4a39b540-3048-4f2c-b13e-9ff6a8975896",
3+
"type": "misc",
4+
"description": "Relocate `TlsVersion` to the `net` package."
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"id": "ef3ee209-71da-4e92-9cf8-85b446d32bb0",
3+
"type": "misc",
4+
"description": "Make `ByteArrayContent` and friends `internal` and force consumers to go through companion object convenience functions."
5+
}

codegen/smithy-kotlin-codegen/src/main/kotlin/software/amazon/smithy/kotlin/codegen/KotlinSettings.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@ data class KotlinSettings(
5050
* Derive a subpackage namespace from the root package name
5151
*/
5252
fun subpackage(subpackageName: String): String = "$name.$subpackageName"
53+
54+
/**
55+
* The package namespace for generated serialization/deserialization support
56+
*/
57+
val serde: String
58+
get() = subpackage("serde")
5359
}
5460

5561
/**

codegen/smithy-kotlin-codegen/src/main/kotlin/software/amazon/smithy/kotlin/codegen/core/RuntimeTypes.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ object RuntimeTypes {
1919
val HttpBody = symbol("HttpBody")
2020
val HttpCall = symbol("HttpCall")
2121
val HttpMethod = symbol("HttpMethod")
22-
val ByteArrayContent = symbol("ByteArrayContent", subpackage = "content")
2322
val readAll = symbol("readAll")
2423
val toByteStream = symbol("toByteStream")
2524
val toHttpBody = symbol("toHttpBody")
@@ -109,7 +108,6 @@ object RuntimeTypes {
109108
val buildDocument = symbol("buildDocument")
110109
val decodeToString = symbol("decodeToString")
111110
val Document = symbol("Document")
112-
val StringContent = symbol("StringContent")
113111
val toByteArray = symbol("toByteArray")
114112
}
115113

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

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,12 +97,6 @@ class ShapeValueGenerator(
9797
}
9898

9999
private fun primitiveDeclaration(writer: KotlinWriter, shape: Shape, block: () -> Unit) {
100-
val blobHandlingSymbols = listOf(
101-
RuntimeTypes.Core.Content.ByteArrayContent,
102-
RuntimeTypes.Core.Content.ByteStream,
103-
RuntimeTypes.Core.Content.StringContent,
104-
RuntimeTypes.Core.Content.toByteArray,
105-
)
106100
val suffix = when {
107101
shape.isEnum -> {
108102
val symbol = symbolProvider.toSymbol(shape)
@@ -112,8 +106,7 @@ class ShapeValueGenerator(
112106

113107
shape.type == ShapeType.BLOB -> {
114108
if (shape.hasTrait<StreamingTrait>()) {
115-
writer.addImport(blobHandlingSymbols)
116-
writer.writeInline("StringContent(")
109+
writer.writeInline("#T.fromString(", RuntimeTypes.Core.Content.ByteStream)
117110
")"
118111
} else {
119112
// blob params are spit out as strings

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

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -155,15 +155,14 @@ abstract class HttpBindingProtocolGenerator : ProtocolGenerator {
155155
val serializerSymbol = buildSymbol {
156156
definitionFile = "${op.serializerName()}.kt"
157157
name = op.serializerName()
158-
namespace = "${ctx.settings.pkg.name}.transform"
158+
namespace = ctx.settings.pkg.serde
159159

160160
reference(inputSymbol, SymbolReference.ContextOption.DECLARE)
161161
}
162162
val operationSerializerSymbols = setOf(
163163
RuntimeTypes.Http.HttpBody,
164164
RuntimeTypes.Http.HttpMethod,
165165
RuntimeTypes.HttpClient.Operation.HttpSerialize,
166-
RuntimeTypes.Http.ByteArrayContent,
167166
RuntimeTypes.Http.Request.HttpRequestBuilder,
168167
RuntimeTypes.Http.Request.url,
169168
)
@@ -265,7 +264,7 @@ abstract class HttpBindingProtocolGenerator : ProtocolGenerator {
265264
val sdg = structuredDataSerializer(ctx)
266265
val opBodySerializerFn = sdg.operationSerializer(ctx, op, documentMembers)
267266
writer.write("val payload = #T(context, input)", opBodySerializerFn)
268-
writer.write("builder.body = #T(payload)", RuntimeTypes.Http.ByteArrayContent)
267+
writer.write("builder.body = #T.fromBytes(payload)", RuntimeTypes.Http.HttpBody)
269268
}
270269

271270
resolver.determineRequestContentType(op)?.let { contentType ->
@@ -428,7 +427,7 @@ abstract class HttpBindingProtocolGenerator : ProtocolGenerator {
428427
if (isBinaryStream) {
429428
writer.write("builder.body = input.#L.#T() ?: #T.Empty", memberName, RuntimeTypes.Http.toHttpBody, RuntimeTypes.Http.HttpBody)
430429
} else {
431-
writer.write("builder.body = #T(input.#L)", RuntimeTypes.Http.ByteArrayContent, memberName)
430+
writer.write("builder.body = #T.fromBytes(input.#L)", RuntimeTypes.Http.HttpBody, memberName)
432431
}
433432
}
434433

@@ -438,20 +437,20 @@ abstract class HttpBindingProtocolGenerator : ProtocolGenerator {
438437
} else {
439438
memberName
440439
}
441-
writer.write("builder.body = #T(input.#L.#T())", RuntimeTypes.Http.ByteArrayContent, contents, KotlinTypes.Text.encodeToByteArray)
440+
writer.write("builder.body = #T.fromBytes(input.#L.#T())", RuntimeTypes.Http.HttpBody, contents, KotlinTypes.Text.encodeToByteArray)
442441
}
443442

444443
ShapeType.ENUM ->
445444
writer.write(
446-
"builder.body = #T(input.#L.value.#T())",
447-
RuntimeTypes.Http.ByteArrayContent,
445+
"builder.body = #T.fromBytes(input.#L.value.#T())",
446+
RuntimeTypes.Http.HttpBody,
448447
memberName,
449448
KotlinTypes.Text.encodeToByteArray,
450449
)
451450
ShapeType.INT_ENUM ->
452451
writer.write(
453-
"builder.body = #T(input.#L.value.toString().#T())",
454-
RuntimeTypes.Http.ByteArrayContent,
452+
"builder.body = #T.fromBytes(input.#L.value.toString().#T())",
453+
RuntimeTypes.Http.HttpBody,
455454
memberName,
456455
KotlinTypes.Text.encodeToByteArray,
457456
)
@@ -460,7 +459,7 @@ abstract class HttpBindingProtocolGenerator : ProtocolGenerator {
460459
val sdg = structuredDataSerializer(ctx)
461460
val payloadSerializerFn = sdg.payloadSerializer(ctx, binding.member)
462461
writer.write("val payload = #T(input.#L)", payloadSerializerFn, memberName)
463-
writer.write("builder.body = #T(payload)", RuntimeTypes.Http.ByteArrayContent)
462+
writer.write("builder.body = #T.fromBytes(payload)", RuntimeTypes.Http.HttpBody)
464463
}
465464

466465
else ->
@@ -487,7 +486,7 @@ abstract class HttpBindingProtocolGenerator : ProtocolGenerator {
487486
val definitionFileName = op.deserializerName().replaceFirstChar(Char::uppercaseChar)
488487
definitionFile = "$definitionFileName.kt"
489488
name = op.deserializerName()
490-
namespace = ctx.settings.pkg.subpackage("transform")
489+
namespace = ctx.settings.pkg.serde
491490

492491
reference(outputSymbol, SymbolReference.ContextOption.DECLARE)
493492
}
@@ -542,7 +541,7 @@ abstract class HttpBindingProtocolGenerator : ProtocolGenerator {
542541
val deserializerName = "${outputSymbol.name}Deserializer"
543542
definitionFile = "$deserializerName.kt"
544543
name = deserializerName
545-
namespace = ctx.settings.pkg.subpackage("transform")
544+
namespace = ctx.settings.pkg.serde
546545
reference(outputSymbol, SymbolReference.ContextOption.DECLARE)
547546
}
548547

@@ -996,7 +995,7 @@ fun OperationShape.errorHandlerName(): String = "throw${capitalizedDefaultName()
996995
*/
997996
fun OperationShape.errorHandler(settings: KotlinSettings, block: SymbolRenderer): Symbol = buildSymbol {
998997
name = errorHandlerName()
999-
namespace = "${settings.pkg.name}.transform"
998+
namespace = settings.pkg.serde
1000999
// place error handler in same file as operation deserializer
10011000
definitionFile = "${deserializerName()}.kt"
10021001
renderBy = block

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,9 @@ abstract class HttpProtocolClientGenerator(
127127
}
128128

129129
protected open fun importSymbols(writer: KotlinWriter) {
130-
writer.addImport("${ctx.settings.pkg.name}.model", "*")
130+
writer.addImport(ctx.settings.pkg.subpackage("model"), "*")
131131
if (TopDownIndex(ctx.model).getContainedOperations(ctx.service).isNotEmpty()) {
132-
writer.addImport("${ctx.settings.pkg.name}.transform", "*")
132+
writer.addImport(ctx.settings.pkg.serde, "*")
133133
}
134134

135135
val defaultClientSymbols = setOf(

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ open class HttpProtocolUnitTestResponseGenerator protected constructor(builder:
159159
when (target) {
160160
is BlobShape -> {
161161
val suffix = if (target.hasTrait<StreamingTrait>()) {
162-
"?.toByteArray()"
162+
writer.format("?.#T()", RuntimeTypes.Core.Content.toByteArray)
163163
} else {
164164
""
165165
}

codegen/smithy-kotlin-codegen/src/main/kotlin/software/amazon/smithy/kotlin/codegen/rendering/serde/SerdeExt.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ fun OperationShape.bodySerializer(
4242
block: SymbolRenderer,
4343
): Symbol = buildSymbol {
4444
name = bodySerializerName()
45-
namespace = "${settings.pkg.name}.transform"
46-
// place body serializer in same file as operation serializer implementaiton
45+
namespace = settings.pkg.serde
46+
// place body serializer in same file as operation serializer implementation
4747
definitionFile = "${serializerName()}.kt"
4848
renderBy = block
4949
}
@@ -68,7 +68,7 @@ fun OperationShape.bodyDeserializer(
6868
block: SymbolRenderer,
6969
): Symbol = buildSymbol {
7070
name = bodyDeserializerName()
71-
namespace = "${settings.pkg.name}.transform"
71+
namespace = settings.pkg.serde
7272
// place body serializer in same file as operation serializer implementation
7373
definitionFile = "${deserializerName()}.kt"
7474
renderBy = block
@@ -95,7 +95,7 @@ fun Shape.documentSerializer(
9595

9696
return buildSymbol {
9797
name = "$base$suffix"
98-
namespace = settings.pkg.subpackage("transform")
98+
namespace = settings.pkg.serde
9999
definitionFile = "${symbol.name}DocumentSerializer.kt"
100100
reference(symbol, SymbolReference.ContextOption.DECLARE)
101101
renderBy = block
@@ -123,7 +123,7 @@ fun Shape.documentDeserializer(
123123

124124
return buildSymbol {
125125
name = "$base$suffix"
126-
namespace = settings.pkg.subpackage("transform")
126+
namespace = settings.pkg.serde
127127
definitionFile = "${symbol.name}DocumentDeserializer.kt"
128128
reference(symbol, SymbolReference.ContextOption.DECLARE)
129129
renderBy = block
@@ -141,7 +141,7 @@ fun Symbol.errorDeserializerName(): String = "deserialize" + StringUtils.capital
141141
*/
142142
fun Symbol.errorDeserializer(settings: KotlinSettings, block: SymbolRenderer): Symbol = buildSymbol {
143143
name = errorDeserializerName()
144-
namespace = "${settings.pkg.name}.transform"
144+
namespace = settings.pkg.serde
145145
val symbol = this@errorDeserializer
146146
// place it in the same file as the exception deserializer, e.g. for HTTP protocols this will be in
147147
// same file as HttpDeserialize
@@ -163,7 +163,7 @@ fun Shape.payloadDeserializer(
163163
val suffix = mangledSuffix(members)
164164
return buildSymbol {
165165
name = "$base$suffix"
166-
namespace = settings.pkg.subpackage("transform")
166+
namespace = settings.pkg.serde
167167
definitionFile = "${symbol.name}PayloadDeserializer.kt"
168168
reference(symbol, SymbolReference.ContextOption.DECLARE)
169169
renderBy = block
@@ -183,7 +183,7 @@ fun Shape.payloadSerializer(
183183
val suffix = mangledSuffix(members)
184184
return buildSymbol {
185185
name = "$base$suffix"
186-
namespace = "${settings.pkg.name}.transform"
186+
namespace = settings.pkg.serde
187187
definitionFile = "${symbol.name}PayloadSerializer.kt"
188188
reference(symbol, SymbolReference.ContextOption.DECLARE)
189189
renderBy = block

0 commit comments

Comments
 (0)