Skip to content

Commit d43f947

Browse files
authored
feat: add client config passthrough to waiter opts (#500)
1 parent 04af2e5 commit d43f947

File tree

2 files changed

+43
-13
lines changed

2 files changed

+43
-13
lines changed

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

+13-7
Original file line numberDiff line numberDiff line change
@@ -158,15 +158,21 @@ public static Writable goDocTemplate(String contents) {
158158
* @return writer for formatted docs.
159159
*/
160160
public static Writable autoDocTemplate(String contents) {
161-
return GoWriter.ChainWritable.of(
162-
Arrays.stream(contents.split("\n\n"))
163-
.map(it -> docParagraphWriter(it.replace("\n", " ")))
164-
.toList()
165-
).compose(false);
161+
var paragraphs = contents.split("\n\n");
162+
var chain = new GoWriter.ChainWritable();
163+
for (int i = 0; i < paragraphs.length; ++i) {
164+
chain.add(docParagraphWriter(paragraphs[i], i < paragraphs.length - 1));
165+
}
166+
return chain.compose(false);
166167
}
167168

168-
private static GoWriter.Writable docParagraphWriter(String paragraph) {
169-
return writer -> writer.writeDocs(paragraph).writeDocs("");
169+
private static GoWriter.Writable docParagraphWriter(String paragraph, boolean writeNewline) {
170+
return writer -> {
171+
writer.writeDocs(paragraph);
172+
if (writeNewline) {
173+
writer.writeDocs("");
174+
}
175+
};
170176
}
171177

172178
@SafeVarargs

codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/integration/Waiters.java

+30-6
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,15 @@
1515

1616
package software.amazon.smithy.go.codegen.integration;
1717

18+
import static software.amazon.smithy.go.codegen.GoWriter.autoDocTemplate;
19+
import static software.amazon.smithy.go.codegen.GoWriter.goTemplate;
20+
1821
import java.util.Map;
1922
import java.util.Optional;
2023
import software.amazon.smithy.codegen.core.CodegenException;
2124
import software.amazon.smithy.codegen.core.Symbol;
2225
import software.amazon.smithy.codegen.core.SymbolProvider;
26+
import software.amazon.smithy.go.codegen.ClientOptions;
2327
import software.amazon.smithy.go.codegen.GoDelegator;
2428
import software.amazon.smithy.go.codegen.GoSettings;
2529
import software.amazon.smithy.go.codegen.GoWriter;
@@ -139,15 +143,31 @@ private void generateWaiterOptions(
139143
writer.addUseImports(SmithyGoDependency.TIME);
140144

141145
writer.write("");
142-
writer.writeDocs(
143-
"Set of options to modify how an operation is invoked. These apply to all operations "
144-
+ "invoked for this client. Use functional options on operation call to modify "
145-
+ "this list for per operation behavior."
146-
);
146+
var apiOptionsDocs = autoDocTemplate("""
147+
Set of options to modify how an operation is invoked. These apply to all operations invoked
148+
for this client. Use functional options on operation call to modify this list for per
149+
operation behavior.
150+
151+
Passing options here is functionally equivalent to passing values to this config's
152+
ClientOptions field that extend the inner client's APIOptions directly.""");
147153
Symbol stackSymbol = SymbolUtils.createPointableSymbolBuilder("Stack",
148154
SmithyGoDependency.SMITHY_MIDDLEWARE)
149155
.build();
150-
writer.write("APIOptions []func($P) error", stackSymbol);
156+
writer.write(goTemplate("""
157+
$W
158+
APIOptions []func($P) error
159+
""", apiOptionsDocs, stackSymbol));
160+
161+
var clientOptionsDocs = autoDocTemplate("""
162+
Functional options to be passed to all operations invoked by this client.
163+
164+
Function values that modify the inner APIOptions are applied after the waiter config's own
165+
APIOptions modifiers.""");
166+
writer.write("");
167+
writer.write(goTemplate("""
168+
$W
169+
ClientOptions []func(*$L)
170+
""", clientOptionsDocs, ClientOptions.NAME));
151171

152172
writer.write("");
153173
writer.writeDocs(
@@ -423,6 +443,10 @@ private void generateWaiterInvokerWithOutput(
423443
writer.openBlock("out, err := w.client.$T(ctx, params, func (o *Options) { ", "})",
424444
operationSymbol, () -> {
425445
writer.write("o.APIOptions = append(o.APIOptions, apiOptions...)");
446+
writer.write("""
447+
for _, opt := range options.ClientOptions {
448+
opt(o)
449+
}""");
426450
});
427451
writer.write("");
428452

0 commit comments

Comments
 (0)