Skip to content

Commit 90d03e4

Browse files
authored
allow protocol generators to declare error aliases (#1622)
1 parent 2aa00e6 commit 90d03e4

File tree

4 files changed

+23
-3
lines changed

4 files changed

+23
-3
lines changed

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/HttpBindingProtocolGenerator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -533,7 +533,8 @@ public void generateResponseDeserializers(GenerationContext context) {
533533
this::writeErrorCodeParser,
534534
isErrorCodeInBody,
535535
this::getErrorBodyLocation,
536-
this::getOperationErrors
536+
this::getOperationErrors,
537+
getErrorAliases(context, containedOperations)
537538
);
538539
deserializingErrorShapes.addAll(errorShapes);
539540
}

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/HttpProtocolGeneratorUtils.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.nio.file.Paths;
1919
import java.util.List;
2020
import java.util.Map;
21+
import java.util.Objects;
2122
import java.util.Optional;
2223
import java.util.Set;
2324
import java.util.TreeMap;
@@ -318,7 +319,8 @@ public static Set<StructureShape> generateUnifiedErrorDispatcher(
318319
Consumer<GenerationContext> errorCodeGenerator,
319320
boolean shouldParseErrorBody,
320321
BiFunction<GenerationContext, String, String> bodyErrorLocationModifier,
321-
BiFunction<GenerationContext, List<OperationShape>, Map<String, ShapeId>> operationErrorsToShapes
322+
BiFunction<GenerationContext, List<OperationShape>, Map<String, ShapeId>> operationErrorsToShapes,
323+
Map<String, TreeSet<String>> errorAliases
322324
) {
323325
TypeScriptWriter writer = context.getWriter();
324326
SymbolProvider symbolProvider = context.getSymbolProvider();
@@ -385,6 +387,11 @@ public static Set<StructureShape> generateUnifiedErrorDispatcher(
385387
String outputParam = shouldParseErrorBody ? "parsedOutput" : "output";
386388
writer.write("case $S:", name);
387389
writer.write("case $S:", errorId.toString());
390+
for (String alias : errorAliases.getOrDefault(errorId.toString(), new TreeSet<>())) {
391+
if (!Objects.equals(name, alias) && !Objects.equals(errorId.toString(), alias)) {
392+
writer.write("case $S:", alias);
393+
}
394+
}
388395
writer.indent()
389396
.write("throw await $L($L, context);", errorDeserMethodName, outputParam)
390397
.dedent();

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/HttpRpcProtocolGenerator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,8 @@ public void generateResponseDeserializers(GenerationContext context) {
234234
this::writeErrorCodeParser,
235235
isErrorCodeInBody,
236236
this::getErrorBodyLocation,
237-
this::getOperationErrors
237+
this::getOperationErrors,
238+
getErrorAliases(context, containedOperations)
238239
);
239240
deserializingErrorShapes.addAll(errorShapes);
240241
}

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/ProtocolGenerator.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@
1616
package software.amazon.smithy.typescript.codegen.integration;
1717

1818
import java.util.Collection;
19+
import java.util.Collections;
1920
import java.util.LinkedHashMap;
2021
import java.util.Map;
22+
import java.util.TreeSet;
2123
import java.util.stream.Collectors;
2224
import software.amazon.smithy.codegen.core.CodegenException;
2325
import software.amazon.smithy.codegen.core.Symbol;
@@ -321,6 +323,15 @@ default Map<String, ShapeId> getOperationErrors(GenerationContext context, Colle
321323
return errors;
322324
}
323325

326+
/**
327+
* @return map of fully qualified shape id to aliases and/or short names that should map to the same error.
328+
*/
329+
default Map<String, TreeSet<String>> getErrorAliases(
330+
GenerationContext context, Collection<OperationShape> operations
331+
) {
332+
return Collections.emptyMap();
333+
}
334+
324335
/**
325336
* Context object used for service serialization and deserialization.
326337
*/

0 commit comments

Comments
 (0)