diff --git a/codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/parse/JsonParserGenerator.kt b/codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/parse/JsonParserGenerator.kt index d3f46439c0..2f1e30a38f 100644 --- a/codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/parse/JsonParserGenerator.kt +++ b/codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/parse/JsonParserGenerator.kt @@ -523,6 +523,7 @@ class JsonParserGenerator( "Shape" to returnSymbolToParse.symbol, ) { rust("let mut variant = None;") + val checkValueSet = !shape.members().all { it.isTargetUnit() } && !codegenTarget.renderUnknownVariant() rustBlock("match tokens.next().transpose()?") { rustBlockTemplate( """ @@ -555,7 +556,7 @@ class JsonParserGenerator( } else { withBlock("Some(#T::$variantName(", "))", returnSymbolToParse.symbol) { deserializeMember(member) - unwrapOrDefaultOrError(member) + unwrapOrDefaultOrError(member, checkValueSet) } } } @@ -593,8 +594,8 @@ class JsonParserGenerator( rust("#T(tokens)?", nestedParser) } - private fun RustWriter.unwrapOrDefaultOrError(member: MemberShape) { - if (symbolProvider.toSymbol(member).canUseDefault()) { + private fun RustWriter.unwrapOrDefaultOrError(member: MemberShape, checkValueSet: Boolean) { + if (symbolProvider.toSymbol(member).canUseDefault() && !checkValueSet) { rust(".unwrap_or_default()") } else { rustTemplate( diff --git a/codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/protocol/ServerProtocolTestGenerator.kt b/codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/protocol/ServerProtocolTestGenerator.kt index 30a4535129..9727ca580b 100644 --- a/codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/protocol/ServerProtocolTestGenerator.kt +++ b/codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/protocol/ServerProtocolTestGenerator.kt @@ -774,8 +774,6 @@ class ServerProtocolTestGenerator( FailingTest(RestJson, "RestJsonWithBodyExpectsApplicationJsonContentType", TestType.MalformedRequest), - FailingTest(RestJson, "RestJsonMalformedUnionNoFieldsSet", TestType.MalformedRequest), - // Tests involving constraint traits, which are not yet fully implemented. // See https://github.com/awslabs/smithy-rs/issues/1401. FailingTest(RestJsonValidation, "RestJsonMalformedRangeFloat_case0", TestType.MalformedRequest),