Skip to content

Commit eb34a87

Browse files
authored
fix: support for schema codegen of nullable list / map elements (#1591)
1 parent 90bb897 commit eb34a87

File tree

8 files changed

+34
-6
lines changed

8 files changed

+34
-6
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"id": "26842b1e-eda3-4dc5-b306-20cce3a1125d",
3+
"type": "bugfix",
4+
"description": "Fix schema generation for nullable lists and maps",
5+
"issues": [
6+
"https://github.com/awslabs/aws-sdk-kotlin/issues/1590"
7+
],
8+
"module": "dynamodb-mapper"
9+
}

hll/dynamodb-mapper/dynamodb-mapper-schema-codegen/src/main/kotlin/aws/sdk/kotlin/hll/dynamodbmapper/codegen/annotations/rendering/SchemaRenderer.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,12 @@ internal class SchemaRenderer(
175175
val type = Type.from(ksType)
176176

177177
when {
178+
type.nullable -> {
179+
writeInline("#T(", MapperTypes.Values.NullableConverter)
180+
renderValueConverter(ksType.makeNotNullable())
181+
writeInline(")")
182+
}
183+
178184
ksType.isEnum -> writeInline("#T()", MapperTypes.Values.Scalars.enumConverter(type))
179185

180186
// FIXME Handle multi-module codegen rather than assuming nested classes will be in the same [ctx.pkg]
@@ -201,12 +207,6 @@ internal class SchemaRenderer(
201207

202208
type.isGenericFor(Types.Kotlin.Collections.Set) -> writeInline("#T", ksType.singleArgument().setValueConverter)
203209

204-
type.nullable -> {
205-
writeInline("#T(", MapperTypes.Values.NullableConverter)
206-
renderValueConverter(ksType.makeNotNullable())
207-
writeInline(")")
208-
}
209-
210210
else -> writeInline(
211211
"#T",
212212
when (type) {

hll/dynamodb-mapper/dynamodb-mapper-schema-generator-plugin/src/test/resources/standard-item-converters/src/Lists.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ public data class Lists(
3232
var listUShort: List<UShort>,
3333
var listULong: List<ULong>,
3434
var listEnum: List<EnumAnimals>,
35+
var nullableList: List<String>?,
36+
var listNullableElement: List<String?>,
37+
var nullableListNullableElement: List<String?>?,
3538
) {
3639
override fun equals(other: Any?): Boolean {
3740
if (this === other) return true
@@ -56,6 +59,9 @@ public data class Lists(
5659
if (listUShort != other.listUShort) return false
5760
if (listULong != other.listULong) return false
5861
if (listEnum != other.listEnum) return false
62+
if (nullableList != other.nullableList) return false
63+
if (listNullableElement != other.listNullableElement) return false
64+
if (nullableListNullableElement != other.nullableListNullableElement) return false
5965

6066
return true
6167
}

hll/dynamodb-mapper/dynamodb-mapper-schema-generator-plugin/src/test/resources/standard-item-converters/src/Maps.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,7 @@ public data class Maps(
2424
var mapStringListString: Map<String, List<String>>,
2525
var mapStringListMapStringString: Map<String, List<Map<String, String>>>,
2626
var mapEnum: Map<String, EnumAnimals>,
27+
var nullableMap: Map<String, String>?,
28+
var mapNullableValue: Map<String, String?>,
29+
var nullableMapNullableValue: Map<String, String?>?,
2730
)

hll/dynamodb-mapper/dynamodb-mapper-schema-generator-plugin/src/test/resources/standard-item-converters/src/Sets.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public data class Sets(
2828
var setUInt: Set<UInt>,
2929
var setULong: Set<ULong>,
3030
var setUShort: Set<UShort>,
31+
var nullableSet: Set<String>?,
3132
) {
3233
override fun equals(other: Any?): Boolean {
3334
if (this === other) return true
@@ -49,6 +50,8 @@ public data class Sets(
4950
if (setULong != other.setULong) return false
5051
if (setUShort != other.setUShort) return false
5152

53+
if (nullableSet != other.nullableSet) return false
54+
5255
return true
5356
}
5457
}

hll/dynamodb-mapper/dynamodb-mapper-schema-generator-plugin/src/test/resources/standard-item-converters/test/ListsTest.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ public class ListsTest {
3131
listUShort = listOf(UShort.MIN_VALUE, UShort.MAX_VALUE),
3232
listULong = listOf(ULong.MIN_VALUE, ULong.MAX_VALUE),
3333
listEnum = listOf(EnumAnimals.CAT, EnumAnimals.DOG, EnumAnimals.SHEEP),
34+
nullableList = null,
35+
listNullableElement = listOf("foo", null, "baz"),
36+
nullableListNullableElement = null,
3437
)
3538

3639
val item = ListsConverter.convertTo(lists)

hll/dynamodb-mapper/dynamodb-mapper-schema-generator-plugin/src/test/resources/standard-item-converters/test/MapsTest.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ public class MapsTest {
3535
),
3636
),
3737
mapEnum = mapOf("pet1" to EnumAnimals.CAT, "pet2" to EnumAnimals.DOG, "pet3" to EnumAnimals.SHEEP),
38+
nullableMap = null,
39+
mapNullableValue = mapOf("key1" to "value1", "key2" to null),
40+
nullableMapNullableValue = null,
3841
)
3942

4043
val item = MapsConverter.convertTo(maps)

hll/dynamodb-mapper/dynamodb-mapper-schema-generator-plugin/src/test/resources/standard-item-converters/test/SetsTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public class SetsTest {
2828
setUInt = setOf(100u, 200u, 300u),
2929
setULong = setOf(1000uL, 2000uL, 3000uL),
3030
setUShort = setOf(1000u.toUShort(), 2000u.toUShort(), 3000u.toUShort()),
31+
nullableSet = null,
3132
)
3233

3334
val item = SetsConverter.convertTo(sets)

0 commit comments

Comments
 (0)