|
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,20 @@ 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 | + |
| 127 | + StringBuilder additionalDocs = new StringBuilder() |
| 128 | + .append("\n") |
| 129 | + .append(getCommandExample( |
| 130 | + serviceSymbol.getName(), configType, name, inputType.getName(), outputType.getName() |
| 131 | + )) |
| 132 | + .append("\n") |
| 133 | + .append(getThrownExceptions()); |
| 134 | + |
| 135 | + writer.writeShapeDocs( |
| 136 | + operation, |
| 137 | + shapeDoc -> shapeDoc + additionalDocs |
| 138 | + ); |
| 139 | + |
125 | 140 | writer.openBlock(
|
126 | 141 | "export class $L extends $$Command<$T, $T, $L> {", "}",
|
127 | 142 | name, inputType, outputType,
|
@@ -169,6 +184,26 @@ private String getCommandExample(String serviceName, String configName, String c
|
169 | 184 | + String.format("@see {@link %s | config} for %s's `config` shape.%n", configName, serviceName);
|
170 | 185 | }
|
171 | 186 |
|
| 187 | + private String getThrownExceptions() { |
| 188 | + List<ShapeId> errors = operation.getErrors(); |
| 189 | + StringBuilder buffer = new StringBuilder(); |
| 190 | + for (ShapeId error : errors) { |
| 191 | + Shape errorShape = model.getShape(error).get(); |
| 192 | + Optional<DocumentationTrait> doc = errorShape.getTrait(DocumentationTrait.class); |
| 193 | + ErrorTrait errorTrait = errorShape.getTrait(ErrorTrait.class).get(); |
| 194 | + |
| 195 | + if (doc.isPresent()) { |
| 196 | + buffer.append(String.format("@throws {@link %s} (%s fault)%n %s", |
| 197 | + error.getName(), errorTrait.getValue(), doc.get().getValue())); |
| 198 | + } else { |
| 199 | + buffer.append(String.format("@throws {@link %s} (%s fault)", |
| 200 | + error.getName(), errorTrait.getValue())); |
| 201 | + } |
| 202 | + buffer.append("\n\n"); |
| 203 | + } |
| 204 | + return buffer.toString(); |
| 205 | + } |
| 206 | + |
172 | 207 | private void generateCommandConstructor() {
|
173 | 208 | writer.openBlock("constructor(readonly input: $T) {", "}", inputType, () -> {
|
174 | 209 | // The constructor can be intercepted and changed.
|
|
0 commit comments