Skip to content

Commit 708bee3

Browse files
authored
move writable and chainwritable up (#622)
1 parent 7bfe108 commit 708bee3

File tree

60 files changed

+528
-481
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+528
-481
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package software.amazon.smithy.go.codegen;
2+
3+
import java.util.ArrayList;
4+
import java.util.Collection;
5+
import java.util.List;
6+
import java.util.Optional;
7+
import java.util.function.Function;
8+
import software.amazon.smithy.utils.ListUtils;
9+
10+
/**
11+
* Chains together multiple Writables that can be composed into one Writable.
12+
*/
13+
public final class ChainWritable {
14+
private final List<Writable> writables;
15+
16+
public ChainWritable() {
17+
writables = new ArrayList<>();
18+
}
19+
20+
public static ChainWritable of(Writable... writables) {
21+
var chain = new ChainWritable();
22+
chain.writables.addAll(ListUtils.of(writables));
23+
return chain;
24+
}
25+
26+
public static ChainWritable of(Collection<Writable> writables) {
27+
var chain = new ChainWritable();
28+
chain.writables.addAll(writables);
29+
return chain;
30+
}
31+
32+
public boolean isEmpty() {
33+
return writables.isEmpty();
34+
}
35+
36+
public ChainWritable add(Writable writable) {
37+
writables.add(writable);
38+
return this;
39+
}
40+
41+
public <T> ChainWritable add(Optional<T> value, Function<T, Writable> fn) {
42+
value.ifPresent(t -> writables.add(fn.apply(t)));
43+
return this;
44+
}
45+
46+
public ChainWritable add(boolean include, Writable writable) {
47+
if (!include) {
48+
writables.add(writable);
49+
}
50+
return this;
51+
}
52+
53+
public Writable compose(boolean writeNewlines) {
54+
return (GoWriter writer) -> {
55+
var hasPrevious = false;
56+
for (Writable writable : writables) {
57+
if (hasPrevious && writeNewlines) {
58+
writer.write("");
59+
}
60+
hasPrevious = true;
61+
writer.write("$W", writable);
62+
}
63+
};
64+
}
65+
66+
public Writable compose() {
67+
return compose(true);
68+
}
69+
}

codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/ClientOptions.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
/**
3737
* Implements codegen for service client config.
3838
*/
39-
public class ClientOptions implements GoWriter.Writable {
39+
public class ClientOptions implements Writable {
4040
public static final String NAME = "Options";
4141

4242
private final ProtocolGenerator.GenerationContext context;
@@ -66,7 +66,7 @@ public void accept(GoWriter writer) {
6666
writer.write(generate());
6767
}
6868

69-
private GoWriter.Writable generate() {
69+
private Writable generate() {
7070
var apiOptionsDocs = goDocTemplate(
7171
"Set of options to modify how an operation is invoked. These apply to all operations "
7272
+ "invoked for this client. Use functional options on operation call to modify this "
@@ -95,15 +95,15 @@ private GoWriter.Writable generate() {
9595
"apiOptionsDocs", apiOptionsDocs,
9696
"options", NAME,
9797
"stack", SmithyGoTypes.Middleware.Stack,
98-
"fields", GoWriter.ChainWritable.of(fields.stream().map(this::writeField).toList()).compose(),
98+
"fields", ChainWritable.of(fields.stream().map(this::writeField).toList()).compose(),
9999
"protocolFields", generateProtocolFields(),
100100
"copy", generateCopy(),
101101
"getIdentityResolver", generateGetIdentityResolver(),
102102
"helpers", generateHelpers()
103103
));
104104
}
105105

106-
private GoWriter.Writable generateProtocolTypes() {
106+
private Writable generateProtocolTypes() {
107107
ensureSupportedProtocol();
108108
return goTemplate("""
109109
type HTTPClient interface {
@@ -112,8 +112,8 @@ private GoWriter.Writable generateProtocolTypes() {
112112
""", GoStdlibTypes.Net.Http.Request, GoStdlibTypes.Net.Http.Response);
113113
}
114114

115-
private GoWriter.Writable writeField(ConfigField field) {
116-
GoWriter.Writable docs = writer -> {
115+
private Writable writeField(ConfigField field) {
116+
Writable docs = writer -> {
117117
field.getDocumentation().ifPresent(writer::writeDocs);
118118
field.getDeprecated().ifPresent(s -> {
119119
if (field.getDocumentation().isPresent()) {
@@ -128,7 +128,7 @@ private GoWriter.Writable writeField(ConfigField field) {
128128
""", docs, field.getName(), field.getType());
129129
}
130130

131-
private GoWriter.Writable generateProtocolFields() {
131+
private Writable generateProtocolFields() {
132132
ensureSupportedProtocol();
133133
return goTemplate("""
134134
$1W
@@ -157,7 +157,7 @@ private GoWriter.Writable generateProtocolFields() {
157157
goDocTemplate("Priority list of preferred auth scheme names (e.g. sigv4a)."));
158158
}
159159

160-
private GoWriter.Writable generateCopy() {
160+
private Writable generateCopy() {
161161
return goTemplate("""
162162
// Copy creates a clone where the APIOptions list is deep copied.
163163
func (o $1L) Copy() $1L {
@@ -171,7 +171,7 @@ private GoWriter.Writable generateCopy() {
171171
""", NAME, SmithyGoTypes.Middleware.Stack);
172172
}
173173

174-
private GoWriter.Writable generateGetIdentityResolver() {
174+
private Writable generateGetIdentityResolver() {
175175
return goTemplate("""
176176
func (o $L) GetIdentityResolver(schemeID string) $T {
177177
$W
@@ -181,7 +181,7 @@ private GoWriter.Writable generateGetIdentityResolver() {
181181
""",
182182
NAME,
183183
SmithyGoTypes.Auth.IdentityResolver,
184-
GoWriter.ChainWritable.of(
184+
ChainWritable.of(
185185
ServiceIndex.of(context.getModel())
186186
.getEffectiveAuthSchemes(context.getService()).keySet().stream()
187187
.filter(authSchemes::containsKey)
@@ -191,14 +191,14 @@ private GoWriter.Writable generateGetIdentityResolver() {
191191
generateGetIdentityResolverMapping(NoAuthTrait.ID, new AnonymousDefinition()));
192192
}
193193

194-
private GoWriter.Writable generateGetIdentityResolverMapping(ShapeId schemeId, AuthSchemeDefinition scheme) {
194+
private Writable generateGetIdentityResolverMapping(ShapeId schemeId, AuthSchemeDefinition scheme) {
195195
return goTemplate("""
196196
if schemeID == $S {
197197
return $W
198198
}""", schemeId.toString(), scheme.generateOptionsIdentityResolver());
199199
}
200200

201-
private GoWriter.Writable generateHelpers() {
201+
private Writable generateHelpers() {
202202
return writer -> {
203203
writer.write("""
204204
$W

codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/GoJmespathExpressionGenerator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -411,8 +411,8 @@ private Shape expectMember(MapShape shape) {
411411
}
412412

413413
// helper to generate comparisons from two results, automatically handling any dereferencing in the process
414-
private GoWriter.Writable compareVariables(String ident, Variable left, Variable right, ComparatorType cmp,
415-
String cast) {
414+
private Writable compareVariables(String ident, Variable left, Variable right, ComparatorType cmp,
415+
String cast) {
416416
var isLPtr = isPointable(left.type);
417417
var isRPtr = isPointable(right.type);
418418
if (!isLPtr && !isRPtr) {

codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/GoStackStepMiddlewareGenerator.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public static GoStackStepMiddlewareGenerator createInitializeStepMiddleware(Stri
7373
* @param body is the function body.
7474
* @return the generated middleware func.
7575
*/
76-
public static GoWriter.Writable generateInitializeMiddlewareFunc(GoWriter.Writable body) {
76+
public static Writable generateInitializeMiddlewareFunc(Writable body) {
7777
return goTemplate("""
7878
func(ctx $T, in $T, next $T) (
7979
out $T, metadata $T, err error,
@@ -143,7 +143,7 @@ public static GoStackStepMiddlewareGenerator createFinalizeStepMiddleware(String
143143
* @param body is the function body.
144144
* @return the generated middleware func.
145145
*/
146-
public static GoWriter.Writable generateFinalizeMiddlewareFunc(GoWriter.Writable body) {
146+
public static Writable generateFinalizeMiddlewareFunc(Writable body) {
147147
return goTemplate("""
148148
func(ctx $T, in $T, next $T) (
149149
out $T, metadata $T, err error,
@@ -284,7 +284,7 @@ public void writeMiddleware(
284284
* @param fields A Writable that renders the middleware struct's fields.
285285
* @return the writable.
286286
*/
287-
public GoWriter.Writable asWritable(GoWriter.Writable body, GoWriter.Writable fields) {
287+
public Writable asWritable(Writable body, Writable fields) {
288288
return writer -> writeMiddleware(
289289
writer,
290290
(generator, bodyWriter) -> bodyWriter.write("$W", body),

codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/GoWriter.java

Lines changed: 2 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,12 @@
1616
package software.amazon.smithy.go.codegen;
1717

1818
import java.util.ArrayList;
19-
import java.util.Collection;
2019
import java.util.HashMap;
2120
import java.util.List;
2221
import java.util.Map;
2322
import java.util.Optional;
2423
import java.util.function.BiFunction;
2524
import java.util.function.Consumer;
26-
import java.util.function.Function;
2725
import java.util.logging.Logger;
2826
import java.util.regex.Pattern;
2927
import software.amazon.smithy.codegen.core.CodegenException;
@@ -43,7 +41,6 @@
4341
import software.amazon.smithy.model.traits.RequiredTrait;
4442
import software.amazon.smithy.model.traits.StringTrait;
4543
import software.amazon.smithy.utils.AbstractCodeWriter;
46-
import software.amazon.smithy.utils.ListUtils;
4744
import software.amazon.smithy.utils.SmithyInternalApi;
4845
import software.amazon.smithy.utils.StringUtils;
4946

@@ -168,14 +165,14 @@ public static Writable goDocTemplate(String contents) {
168165
*/
169166
public static Writable autoDocTemplate(String contents) {
170167
var paragraphs = contents.split("\n\n");
171-
var chain = new GoWriter.ChainWritable();
168+
var chain = new ChainWritable();
172169
for (int i = 0; i < paragraphs.length; ++i) {
173170
chain.add(docParagraphWriter(paragraphs[i], i < paragraphs.length - 1));
174171
}
175172
return chain.compose(false);
176173
}
177174

178-
private static GoWriter.Writable docParagraphWriter(String paragraph, boolean writeNewline) {
175+
private static Writable docParagraphWriter(String paragraph, boolean writeNewline) {
179176
return writer -> {
180177
writer.writeDocs(paragraph);
181178
if (writeNewline) {
@@ -1001,67 +998,4 @@ public String apply(Object type, String indent) {
1001998
}
1002999
}
10031000

1004-
public interface Writable extends Consumer<GoWriter> {
1005-
}
1006-
1007-
/**
1008-
* Chains together multiple Writables that can be composed into one Writable.
1009-
*/
1010-
public static final class ChainWritable {
1011-
private final List<GoWriter.Writable> writables;
1012-
1013-
public ChainWritable() {
1014-
writables = new ArrayList<>();
1015-
}
1016-
1017-
public static ChainWritable of(GoWriter.Writable... writables) {
1018-
var chain = new ChainWritable();
1019-
chain.writables.addAll(ListUtils.of(writables));
1020-
return chain;
1021-
}
1022-
1023-
public static ChainWritable of(Collection<GoWriter.Writable> writables) {
1024-
var chain = new ChainWritable();
1025-
chain.writables.addAll(writables);
1026-
return chain;
1027-
}
1028-
1029-
public boolean isEmpty() {
1030-
return writables.isEmpty();
1031-
}
1032-
1033-
public ChainWritable add(GoWriter.Writable writable) {
1034-
writables.add(writable);
1035-
return this;
1036-
}
1037-
1038-
public <T> ChainWritable add(Optional<T> value, Function<T, Writable> fn) {
1039-
value.ifPresent(t -> writables.add(fn.apply(t)));
1040-
return this;
1041-
}
1042-
1043-
public ChainWritable add(boolean include, GoWriter.Writable writable) {
1044-
if (!include) {
1045-
writables.add(writable);
1046-
}
1047-
return this;
1048-
}
1049-
1050-
public GoWriter.Writable compose(boolean writeNewlines) {
1051-
return (GoWriter writer) -> {
1052-
var hasPrevious = false;
1053-
for (GoWriter.Writable writable : writables) {
1054-
if (hasPrevious && writeNewlines) {
1055-
writer.write("");
1056-
}
1057-
hasPrevious = true;
1058-
writer.write("$W", writable);
1059-
}
1060-
};
1061-
}
1062-
1063-
public GoWriter.Writable compose() {
1064-
return compose(true);
1065-
}
1066-
}
10671001
}

0 commit comments

Comments
 (0)