in codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/integration/Waiters2.java [211:272]
private void generateWaiterClient(
Model model,
SymbolProvider symbolProvider,
GoWriter writer,
OperationShape operationShape,
String waiterName,
Waiter waiter
) {
Symbol operationSymbol = symbolProvider.toSymbol(operationShape);
String clientName = generateWaiterClientName(waiterName);
writer.write("");
writer.writeDocs(
String.format("%s defines the waiters for %s", clientName, waiterName)
);
writer.openBlock("type $L struct {", "}",
clientName, () -> {
writer.write("");
writer.write("client $L", OperationInterfaceGenerator.getApiClientInterfaceName(operationSymbol));
writer.write("");
writer.write("options $L", generateWaiterOptionsName(waiterName));
});
writer.write("");
String constructorName = String.format("New%s", clientName);
Symbol waiterOptionsSymbol = SymbolUtils.createPointableSymbolBuilder(
generateWaiterOptionsName(waiterName)
).build();
Symbol clientSymbol = SymbolUtils.createPointableSymbolBuilder(
clientName
).build();
writer.writeDocs(
String.format("%s constructs a %s.", constructorName, clientName)
);
writer.openBlock("func $L(client $L, optFns ...func($P)) $P {", "}",
constructorName, OperationInterfaceGenerator.getApiClientInterfaceName(operationSymbol),
waiterOptionsSymbol, clientSymbol, () -> {
writer.write("options := $T{}", waiterOptionsSymbol);
writer.addUseImports(SmithyGoDependency.TIME);
// set defaults
writer.write("options.MinDelay = $L * time.Second", waiter.getMinDelay());
writer.write("options.MaxDelay = $L * time.Second", waiter.getMaxDelay());
writer.write("options.Retryable = $L", generateRetryableName(waiterName));
writer.write("");
writer.openBlock("for _, fn := range optFns {",
"}", () -> {
writer.write("fn(&options)");
});
writer.openBlock("return &$T {", "}", clientSymbol, () -> {
writer.write("client: client, ");
writer.write("options: options, ");
});
});
}