|
37 | 37 | import software.amazon.smithy.model.shapes.OperationShape;
|
38 | 38 | import software.amazon.smithy.model.shapes.ServiceShape;
|
39 | 39 | import software.amazon.smithy.model.shapes.Shape;
|
| 40 | +import software.amazon.smithy.model.shapes.ShapeId; |
40 | 41 | import software.amazon.smithy.model.shapes.StructureShape;
|
| 42 | +import software.amazon.smithy.model.traits.DocumentationTrait; |
| 43 | +import software.amazon.smithy.model.traits.ErrorTrait; |
41 | 44 | import software.amazon.smithy.rulesengine.traits.EndpointRuleSetTrait;
|
42 | 45 | import software.amazon.smithy.typescript.codegen.endpointsV2.EndpointsParamNameMap;
|
43 | 46 | import software.amazon.smithy.typescript.codegen.endpointsV2.RuleSetParameterFinder;
|
@@ -120,8 +123,13 @@ private void generateClientCommand() {
|
120 | 123 | writer.addImport("MiddlewareStack", "MiddlewareStack", "@aws-sdk/types");
|
121 | 124 |
|
122 | 125 | String name = symbol.getName();
|
123 |
| - writer.writeShapeDocs(operation, shapeDoc -> shapeDoc + "\n" + getCommandExample(serviceSymbol.getName(), |
124 |
| - configType, name, inputType.getName(), outputType.getName())); |
| 126 | + writer.writeShapeDocs( |
| 127 | + operation, |
| 128 | + shapeDoc -> shapeDoc + "\n" |
| 129 | + + getCommandExample(serviceSymbol.getName(), configType, name, inputType.getName(), outputType.getName()) |
| 130 | + + "\n" |
| 131 | + + getThrownExceptions() |
| 132 | + ); |
125 | 133 | writer.openBlock(
|
126 | 134 | "export class $L extends $$Command<$T, $T, $L> {", "}",
|
127 | 135 | name, inputType, outputType,
|
@@ -169,6 +177,25 @@ private String getCommandExample(String serviceName, String configName, String c
|
169 | 177 | + String.format("@see {@link %s | config} for %s's `config` shape.%n", configName, serviceName);
|
170 | 178 | }
|
171 | 179 |
|
| 180 | + private String getThrownExceptions() { |
| 181 | + List<ShapeId> errors = operation.getErrors(); |
| 182 | + StringBuilder buffer = new StringBuilder(); |
| 183 | + for (ShapeId error : errors) { |
| 184 | + Shape errorShape = model.getShape(error).get(); |
| 185 | + Optional<DocumentationTrait> doc = errorShape.getTrait(DocumentationTrait.class); |
| 186 | + ErrorTrait errorTrait = errorShape.getTrait(ErrorTrait.class).get(); |
| 187 | + |
| 188 | + if (doc.isPresent()) { |
| 189 | + buffer.append(String.format("@throws {@link %s} (%s fault) %s\n", |
| 190 | + error.getName(), errorTrait.getValue(), doc.get().getValue())); |
| 191 | + } else { |
| 192 | + buffer.append(String.format("@throws {@link %s} (%s fault)\n", |
| 193 | + error.getName(), errorTrait.getValue())); |
| 194 | + } |
| 195 | + } |
| 196 | + return buffer.toString(); |
| 197 | + } |
| 198 | + |
172 | 199 | private void generateCommandConstructor() {
|
173 | 200 | writer.openBlock("constructor(readonly input: $T) {", "}", inputType, () -> {
|
174 | 201 | // The constructor can be intercepted and changed.
|
|
0 commit comments