Skip to content

Commit

Permalink
fix: stop serializing default values for @clientOptional members (#917)
Browse files Browse the repository at this point in the history
  • Loading branch information
ianbotsf authored Aug 14, 2023
1 parent 37c2be7 commit 724ebd1
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 2 deletions.
8 changes: 8 additions & 0 deletions .changes/3b0318b9-d379-4fb4-8bcc-8dd4de6029a0.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"id": "3b0318b9-d379-4fb4-8bcc-8dd4de6029a0",
"type": "bugfix",
"description": "Stop serializing default values for `@clientOptional` members",
"issues": [
"awslabs/aws-sdk-kotlin#1016"
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import software.amazon.smithy.kotlin.codegen.utils.dq
import software.amazon.smithy.model.Model
import software.amazon.smithy.model.knowledge.NullableIndex
import software.amazon.smithy.model.shapes.*
import software.amazon.smithy.model.traits.ClientOptionalTrait
import software.amazon.smithy.model.traits.DefaultTrait
import software.amazon.smithy.model.traits.SparseTrait
import software.amazon.smithy.model.traits.StreamingTrait
Expand Down Expand Up @@ -183,8 +184,10 @@ class KotlinSymbolProvider(private val model: Model, private val settings: Kotli
.apply {
if (nullableIndex.isMemberNullable(shape, NullableIndex.CheckMode.CLIENT_ZERO_VALUE_V1_NO_INPUT)) nullable()

shape.getTrait<DefaultTrait>()?.let {
defaultValue(it.getDefaultValue(targetShape), DefaultValueType.MODELED)
if (!shape.hasTrait<ClientOptionalTrait>()) { // @ClientOptional supersedes @default
shape.getTrait<DefaultTrait>()?.let {
defaultValue(it.getDefaultValue(targetShape), DefaultValueType.MODELED)
}
}
}
.build()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -366,6 +366,27 @@ class SymbolProviderTest {
assertEquals("null", memberSymbol.defaultValue())
}

@Test
fun `@clientOptional overrides @default`() {
val model = """
structure MyStruct {
@required
@clientOptional
@default("Foo")
quux: QuuxType
}
string QuuxType
""".prependNamespaceAndService().toSmithyModel()

val provider: SymbolProvider = KotlinCodegenPlugin.createSymbolProvider(model)
val member = model.expectShape<MemberShape>("com.test#MyStruct\$quux")
val memberSymbol = provider.toSymbol(member)
assertEquals("kotlin", memberSymbol.namespace)
assertTrue(memberSymbol.isNullable)
assertEquals("null", memberSymbol.defaultValue())
}

@Test
fun `@input`() {
val model = """
Expand Down

0 comments on commit 724ebd1

Please sign in to comment.