Skip to content

Commit 165e04a

Browse files
authored
Process String Array parameters in Endpoints (#1376)
1 parent 77db9e7 commit 165e04a

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/endpointsV2/ParameterGenerator.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.util.AbstractMap;
1919
import java.util.Map;
2020
import java.util.Optional;
21+
import java.util.stream.Collectors;
2122
import software.amazon.smithy.model.node.BooleanNode;
2223
import software.amazon.smithy.model.node.Node;
2324
import software.amazon.smithy.model.node.ObjectNode;
@@ -64,6 +65,9 @@ public ParameterGenerator(String key, Node param, boolean isInputKey) {
6465
case "boolean":
6566
tsParamType = "boolean";
6667
break;
68+
case "stringArray":
69+
tsParamType = "string[]";
70+
break;
6771
default:
6872
// required by linter
6973
}
@@ -102,6 +106,11 @@ public String defaultAsCodeString() {
102106
case "boolean":
103107
buffer += paramNode.expectBooleanMember("default").getValue() ? "true" : "false";
104108
break;
109+
case "stringArray":
110+
buffer += paramNode.expectArrayMember("default").getElements().stream()
111+
.map(element -> element.expectStringNode().getValue())
112+
.collect(Collectors.joining("`, `", "[`", "`]"));
113+
break;
105114
default:
106115
throw new RuntimeException("Unhandled endpoint param type: " + type.getValue());
107116
}

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/endpointsV2/RuleSetParameterFinder.java

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import java.util.HashMap;
1919
import java.util.Map;
2020
import java.util.Optional;
21+
import java.util.stream.Collectors;
22+
import software.amazon.smithy.model.node.ArrayNode;
2123
import software.amazon.smithy.model.node.Node;
2224
import software.amazon.smithy.model.node.NodeVisitor;
2325
import software.amazon.smithy.model.node.ObjectNode;
@@ -26,6 +28,7 @@
2628
import software.amazon.smithy.model.shapes.OperationShape;
2729
import software.amazon.smithy.model.shapes.ServiceShape;
2830
import software.amazon.smithy.model.shapes.Shape;
31+
import software.amazon.smithy.model.shapes.ShapeType;
2932
import software.amazon.smithy.rulesengine.traits.ClientContextParamsTrait;
3033
import software.amazon.smithy.rulesengine.traits.ContextParamTrait;
3134
import software.amazon.smithy.rulesengine.traits.EndpointRuleSetTrait;
@@ -66,10 +69,23 @@ public Map<String, String> getClientContextParams() {
6669
if (trait.isPresent()) {
6770
ClientContextParamsTrait clientContextParamsTrait = trait.get();
6871
clientContextParamsTrait.getParameters().forEach((name, definition) -> {
69-
map.put(
70-
name,
71-
definition.getType().toString().toLowerCase() // "boolean" and "string" are directly usable in TS.
72-
);
72+
ShapeType shapeType = definition.getType();
73+
if (shapeType.isShapeType(ShapeType.STRING) || shapeType.isShapeType(ShapeType.BOOLEAN)) {
74+
map.put(
75+
name,
76+
// "boolean" and "string" are directly usable in TS.
77+
definition.getType().toString().toLowerCase()
78+
);
79+
} else if (shapeType.isShapeType(ShapeType.LIST)) {
80+
map.put(
81+
name,
82+
"string[]" // Only string lists are supported.
83+
);
84+
} else {
85+
throw new RuntimeException("unexpected type "
86+
+ definition.getType().toString()
87+
+ " received as clientContextParam.");
88+
}
7389
});
7490
}
7591
return map;
@@ -90,6 +106,11 @@ public Map<String, String> getStaticContextParamValues(OperationShape operation)
90106
value = "`" + definition.getValue().expectStringNode().toString() + "`";
91107
} else if (definition.getValue().isBooleanNode()) {
92108
value = definition.getValue().expectBooleanNode().toString();
109+
} else if (definition.getValue().isArrayNode()) {
110+
ArrayNode arrayNode = definition.getValue().expectArrayNode();
111+
value = arrayNode.getElements().stream()
112+
.map(element -> element.expectStringNode().getValue())
113+
.collect(Collectors.joining("`, `", "[`", "`]"));
93114
} else {
94115
throw new RuntimeException("unexpected type "
95116
+ definition.getValue().getType().toString()

0 commit comments

Comments
 (0)