diff --git a/codegen/codegen-core/src/main/java/software/amazon/smithy/java/codegen/generators/EnumGenerator.java b/codegen/codegen-core/src/main/java/software/amazon/smithy/java/codegen/generators/EnumGenerator.java index 3f0a65513c..ca1ba94c32 100644 --- a/codegen/codegen-core/src/main/java/software/amazon/smithy/java/codegen/generators/EnumGenerator.java +++ b/codegen/codegen-core/src/main/java/software/amazon/smithy/java/codegen/generators/EnumGenerator.java @@ -217,12 +217,19 @@ private void generateUnknownVariant() { writer.pushState(); writer.putContext("objects", Objects.class); writer.putContext("toString", new ToStringGenerator(writer)); + writer.putContext("shapeSerializer", ShapeSerializer.class); + writer.putContext("unsupportedOperation", UnsupportedOperationException.class); var template = """ record $$Unknown(${value:T} value) implements ${shape:T} {${?string} public $$Unknown { ${objects:T}.requireNonNull(value, "Value cannot be null"); }${/string} + @Override + public void serialize(${shapeSerializer:T} serializer) { + throw new ${unsupportedOperation:T}("Cannot serialize enum with unknown value " + this.value); + } + @Override public ${value:T} getValue() { return value; diff --git a/codegen/codegen-plugin/src/test/resources/software/amazon/smithy/java/codegen/types/test-cases/enums/expected/EnumType.java b/codegen/codegen-plugin/src/test/resources/software/amazon/smithy/java/codegen/types/test-cases/enums/expected/EnumType.java index ee2bf19a73..c379142c85 100644 --- a/codegen/codegen-plugin/src/test/resources/software/amazon/smithy/java/codegen/types/test-cases/enums/expected/EnumType.java +++ b/codegen/codegen-plugin/src/test/resources/software/amazon/smithy/java/codegen/types/test-cases/enums/expected/EnumType.java @@ -97,6 +97,11 @@ record $Unknown(String value) implements EnumType { Objects.requireNonNull(value, "Value cannot be null"); } + @Override + public void serialize(ShapeSerializer serializer) { + throw new UnsupportedOperationException("Cannot serialize enum with unknown value " + this.value); + } + @Override public String getValue() { return value; diff --git a/codegen/codegen-plugin/src/test/resources/software/amazon/smithy/java/codegen/types/test-cases/enums/expected/IntEnumType.java b/codegen/codegen-plugin/src/test/resources/software/amazon/smithy/java/codegen/types/test-cases/enums/expected/IntEnumType.java index 6fdd0c2ab4..5cf87e875b 100644 --- a/codegen/codegen-plugin/src/test/resources/software/amazon/smithy/java/codegen/types/test-cases/enums/expected/IntEnumType.java +++ b/codegen/codegen-plugin/src/test/resources/software/amazon/smithy/java/codegen/types/test-cases/enums/expected/IntEnumType.java @@ -110,6 +110,11 @@ public String toString() { record $Unknown(int value) implements IntEnumType { + @Override + public void serialize(ShapeSerializer serializer) { + throw new UnsupportedOperationException("Cannot serialize enum with unknown value " + this.value); + } + @Override public int getValue() { return value; diff --git a/codegen/codegen-plugin/src/test/resources/software/amazon/smithy/java/codegen/types/test-cases/enums/expected/TextType.java b/codegen/codegen-plugin/src/test/resources/software/amazon/smithy/java/codegen/types/test-cases/enums/expected/TextType.java index c789d2ec35..b65c284c26 100644 --- a/codegen/codegen-plugin/src/test/resources/software/amazon/smithy/java/codegen/types/test-cases/enums/expected/TextType.java +++ b/codegen/codegen-plugin/src/test/resources/software/amazon/smithy/java/codegen/types/test-cases/enums/expected/TextType.java @@ -80,6 +80,11 @@ record $Unknown(String value) implements TextType { Objects.requireNonNull(value, "Value cannot be null"); } + @Override + public void serialize(ShapeSerializer serializer) { + throw new UnsupportedOperationException("Cannot serialize enum with unknown value " + this.value); + } + @Override public String getValue() { return value;