in codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/OperationGenerator.java [175:226]
private void generateAddOperationMiddleware() {
Symbol stackSymbol = SymbolUtils.createPointableSymbolBuilder("Stack", SmithyGoDependency.SMITHY_MIDDLEWARE)
.build();
writer.openBlock("func (c *Client) $L(stack $P, options Options) (err error) {", "}",
getAddOperationMiddlewareFuncName(operationSymbol), stackSymbol,
() -> {
generateOperationProtocolMiddlewareAdders();
// Populate middleware's from runtime client plugins
runtimeClientPlugins.forEach(runtimeClientPlugin -> {
if (!runtimeClientPlugin.matchesService(model, service)
&& !runtimeClientPlugin.matchesOperation(model, service, operation)) {
return;
}
if (!runtimeClientPlugin.registerMiddleware().isPresent()) {
return;
}
MiddlewareRegistrar middlewareRegistrar = runtimeClientPlugin.registerMiddleware().get();
Collection<Symbol> functionArguments = middlewareRegistrar.getFunctionArguments();
if (middlewareRegistrar.getInlineRegisterMiddlewareStatement() != null) {
String registerStatement = String.format("if err = stack.%s",
middlewareRegistrar.getInlineRegisterMiddlewareStatement());
writer.writeInline(registerStatement);
writer.writeInline("$T(", middlewareRegistrar.getResolvedFunction());
if (functionArguments != null) {
List<Symbol> args = new ArrayList<>(functionArguments);
for (Symbol arg : args) {
writer.writeInline("$P, ", arg);
}
}
writer.writeInline(")");
writer.write(", $T); err != nil {\nreturn err\n}",
middlewareRegistrar.getInlineRegisterMiddlewarePosition());
} else {
writer.writeInline("if err = $T(stack", middlewareRegistrar.getResolvedFunction());
if (functionArguments != null) {
List<Symbol> args = new ArrayList<>(functionArguments);
for (Symbol arg : args) {
writer.writeInline(", $P", arg);
}
}
writer.write("); err != nil {\nreturn err\n}");
}
});
writer.write("return nil");
});
}