diff --git a/codecs/cbor-codec/src/main/java/software/amazon/smithy/java/cbor/CborDeserializer.java b/codecs/cbor-codec/src/main/java/software/amazon/smithy/java/cbor/CborDeserializer.java index 6b8d69dd4..ef7e34601 100644 --- a/codecs/cbor-codec/src/main/java/software/amazon/smithy/java/cbor/CborDeserializer.java +++ b/codecs/cbor-codec/src/main/java/software/amazon/smithy/java/cbor/CborDeserializer.java @@ -21,6 +21,7 @@ import java.util.concurrent.ConcurrentHashMap; import software.amazon.smithy.java.cbor.CborParser.Token; import software.amazon.smithy.java.core.schema.Schema; +import software.amazon.smithy.java.core.schema.TraitKey; import software.amazon.smithy.java.core.serde.SerializationException; import software.amazon.smithy.java.core.serde.ShapeDeserializer; import software.amazon.smithy.java.core.serde.document.Document; @@ -357,6 +358,10 @@ public Instant readTimestamp(Schema schema) { @Override public void readStruct(Schema schema, T state, StructMemberConsumer consumer) { byte token = parser.currentToken(); + if (schema.hasTrait(TraitKey.UNIT_TYPE_TRAIT) && token == Token.FINISHED) { + // Empty input — treat as empty struct with no members. + return; + } if (token != Token.START_OBJECT) { throw badType("struct", token); }