diff --git a/codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/integration/Paginators.java b/codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/integration/Paginators.java index 135e95b35..d950247f0 100644 --- a/codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/integration/Paginators.java +++ b/codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/integration/Paginators.java @@ -26,6 +26,7 @@ import software.amazon.smithy.go.codegen.GoWriter; import software.amazon.smithy.go.codegen.SmithyGoDependency; import software.amazon.smithy.go.codegen.SymbolUtils; +import software.amazon.smithy.go.codegen.knowledge.GoPointableIndex; import software.amazon.smithy.model.Model; import software.amazon.smithy.model.knowledge.PaginatedIndex; import software.amazon.smithy.model.knowledge.PaginationInfo; @@ -139,6 +140,8 @@ private void writePaginator( Symbol outputSymbol = symbolProvider.toSymbol(paginationInfo.getOutput()); Optional pageSizeMember = paginationInfo.getPageSizeMember(); + GoPointableIndex pointableIndex = GoPointableIndex.of(model); + writer.writeDocs(String.format("NextPage retrieves the next %s page.", operationSymbol.getName())); writer.openBlock("func (p $P) NextPage(ctx $T, optFns ...func(*Options)) ($P, error) {", "}", paginatorSymbol, contextSymbol, outputSymbol, () -> { @@ -151,7 +154,15 @@ private void writePaginator( writer.write("params.$L = p.nextToken", inputMember); pageSizeMember.ifPresent(memberShape -> { - writer.write("params.$L = p.options.Limit", symbolProvider.toMemberName(pageSizeMember.get())); + writer.openBlock("if p.options.Limit > 0 {", "}", () -> { + String memberName = symbolProvider.toMemberName(pageSizeMember.get()); + String value = "p.options.Limit"; + if (pointableIndex.isPointable(pageSizeMember.get())) { + value = "&" + value; + } + writer.write("params.$L = $L", memberName, value); + }); + writer.write(""); }); writer.write("result, err := p.client.$L(ctx, ¶ms, optFns...)", @@ -213,7 +224,7 @@ private void writePaginatorOptions( memberShape.getMemberTrait(model, DocumentationTrait.class).ifPresent(documentationTrait -> { writer.writeDocs(documentationTrait.getValue()); }); - writer.write("Limit $P", symbolProvider.toSymbol(memberShape)); + writer.write("Limit $T", symbolProvider.toSymbol(memberShape)); writer.write(""); }); if (model.expectShape(paginationInfo.getInputTokenMember().getTarget()).isStringShape()) {