|
17 | 17 | import java.util.Locale;
|
18 | 18 | import java.util.Map;
|
19 | 19 | import java.util.Objects;
|
| 20 | +import java.util.stream.Collectors; |
20 | 21 | import software.amazon.smithy.aws.traits.auth.SigV4Trait;
|
21 | 22 | import software.amazon.smithy.awsmcp.model.AwsServiceMetadata;
|
22 | 23 | import software.amazon.smithy.awsmcp.model.PreRequest;
|
|
27 | 28 | import software.amazon.smithy.model.node.ObjectNode;
|
28 | 29 | import software.amazon.smithy.model.shapes.ModelSerializer;
|
29 | 30 | import software.amazon.smithy.model.shapes.ShapeId;
|
30 |
| -import software.amazon.smithy.model.shapes.StructureShape; |
31 | 31 | import software.amazon.smithy.model.traits.EndpointTrait;
|
32 | 32 | import software.amazon.smithy.modelbundle.api.Bundler;
|
33 | 33 | import software.amazon.smithy.modelbundle.api.model.Bundle;
|
| 34 | +import software.amazon.smithy.modelbundle.api.model.GenericArguments; |
34 | 35 | import software.amazon.smithy.modelbundle.api.model.Model;
|
35 | 36 |
|
36 | 37 | final class AwsServiceBundler implements Bundler {
|
@@ -63,32 +64,6 @@ final class AwsServiceBundler implements Bundler {
|
63 | 64 | this.resolver = resolver;
|
64 | 65 | }
|
65 | 66 |
|
66 |
| - private static software.amazon.smithy.model.Model adapt(software.amazon.smithy.model.Model model) { |
67 |
| - var template = model.expectShape(PreRequest.$ID).asStructureShape().get(); |
68 |
| - var b = model.toBuilder(); |
69 |
| - |
70 |
| - // mix in the PreRequest structure members |
71 |
| - for (var op : model.getOperationShapes()) { |
72 |
| - var input = model.expectShape(op.getInput().get(), StructureShape.class).toBuilder(); |
73 |
| - for (var member : template.members()) { |
74 |
| - input.addMember(member.toBuilder() |
75 |
| - .id(ShapeId.from(input.getId().toString() + "$" + member.getMemberName())) |
76 |
| - .build()); |
77 |
| - } |
78 |
| - b.addShape(input.build()); |
79 |
| - } |
80 |
| - |
81 |
| - for (var service : model.getServiceShapes()) { |
82 |
| - b.addShape(service.toBuilder() |
83 |
| - // trim the endpoint rules because they're huge and we don't need them |
84 |
| - .removeTrait(ShapeId.from("smithy.rules#endpointRuleSet")) |
85 |
| - .removeTrait(ENDPOINT_TESTS) |
86 |
| - .build()); |
87 |
| - } |
88 |
| - |
89 |
| - return b.build(); |
90 |
| - } |
91 |
| - |
92 | 67 | @Override
|
93 | 68 | public Bundle bundle() {
|
94 | 69 | try {
|
@@ -122,15 +97,36 @@ public Bundle bundle() {
|
122 | 97 | .configType("aws")
|
123 | 98 | .serviceName(model.getServiceShapes().iterator().next().getId().toString())
|
124 | 99 | .model(Model.builder()
|
125 |
| - .smithyModel( |
126 |
| - ObjectNode.printJson(ModelSerializer.builder().build().serialize(adapt(model)))) |
| 100 | + .smithyModel(serializeModel(model)) |
| 101 | + .build()) |
| 102 | + .requestArguments(GenericArguments.builder() |
| 103 | + .identifier(PreRequest.$ID.toString()) |
| 104 | + .model(Model.builder() |
| 105 | + .smithyModel(loadModel("/META-INF/smithy/bundle.smithy")) |
| 106 | + .build()) |
127 | 107 | .build())
|
128 | 108 | .build();
|
129 | 109 | } catch (Exception e) {
|
130 | 110 | throw new RuntimeException("Failed to bundle " + serviceName, e);
|
131 | 111 | }
|
132 | 112 | }
|
133 | 113 |
|
| 114 | + private static String serializeModel(software.amazon.smithy.model.Model model) { |
| 115 | + return ObjectNode.printJson(ModelSerializer.builder() |
| 116 | + .build() |
| 117 | + .serialize(model)); |
| 118 | + } |
| 119 | + |
| 120 | + private static String loadModel(String path) { |
| 121 | + try (var reader = new BufferedReader(new InputStreamReader( |
| 122 | + Objects.requireNonNull(AwsServiceBundler.class.getResourceAsStream(path)), |
| 123 | + StandardCharsets.UTF_8))) { |
| 124 | + return reader.lines().collect(Collectors.joining()); |
| 125 | + } catch (Exception e) { |
| 126 | + throw new RuntimeException(e); |
| 127 | + } |
| 128 | + } |
| 129 | + |
134 | 130 | Map<String, String> parseEndpoints(ObjectNode endpointTests) {
|
135 | 131 | var testCases = endpointTests.expectArrayMember("testCases");
|
136 | 132 | var endpoints = new HashMap<String, String>();
|
|
0 commit comments