Skip to content

Commit f133b0e

Browse files
committed
Fix unused writer parameter in union serializer for empty structs
Prefix writer with underscore when union contains only empty structs
1 parent 00aecac commit f133b0e

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/serialize/QuerySerializerGenerator.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -357,11 +357,19 @@ abstract class QuerySerializerGenerator(private val codegenContext: CodegenConte
357357

358358
private fun RustWriter.serializeUnion(context: Context<UnionShape>) {
359359
val unionSymbol = symbolProvider.toSymbol(context.shape)
360+
361+
// Check if any union member uses the writer (non-empty structs)
362+
val hasNonEmptyMember =
363+
context.shape.members().any { member ->
364+
!member.isTargetUnit() && !isEmptyStruct(model.expectShape(member.target))
365+
}
366+
val writerVarName = if (hasNonEmptyMember) "writer" else "_writer"
367+
360368
val unionSerializer =
361369
protocolFunctions.serializeFn(context.shape) { fnName ->
362370
Attribute.AllowUnusedMut.render(this)
363371
rustBlockTemplate(
364-
"pub fn $fnName(mut writer: #{QueryValueWriter}, input: &#{Input}) -> #{Result}<(), #{Error}>",
372+
"pub fn $fnName(mut $writerVarName: #{QueryValueWriter}, input: &#{Input}) -> #{Result}<(), #{Error}>",
365373
"Input" to unionSymbol,
366374
*codegenScope,
367375
) {
@@ -380,7 +388,7 @@ abstract class QuerySerializerGenerator(private val codegenContext: CodegenConte
380388
withBlock("#T::$variantName => {", "},", unionSymbol) {
381389
serializeMember(
382390
MemberContext.unionMember(
383-
context.copy(writerExpression = "writer"),
391+
context.copy(writerExpression = writerVarName),
384392
innerVarName,
385393
member,
386394
),

0 commit comments

Comments
 (0)