Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PaginationTrait Support #234

Merged
merged 6 commits into from
Nov 24, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,9 @@
package software.amazon.smithy.go.codegen;

import java.util.function.Consumer;
import software.amazon.smithy.go.codegen.integration.ProtocolGenerator;
import software.amazon.smithy.codegen.core.SymbolProvider;
import software.amazon.smithy.go.codegen.knowledge.GoPointableIndex;
import software.amazon.smithy.model.Model;
import software.amazon.smithy.model.shapes.CollectionShape;
import software.amazon.smithy.model.shapes.MemberShape;
import software.amazon.smithy.model.shapes.Shape;
Expand All @@ -35,32 +36,32 @@ private GoValueAccessUtils() {

/**
* Writes non-zero conditional checks around a lambda specific to the member shape type.
*
* <p>
* Note: Collections and map member values by default will not have individual checks on member values. To check
* not empty strings set the ignoreEmptyString to false.
*
* @param context generation context
* @param writer go writer
* @param member API shape member to determine wrapping check with
* @param operand string of text with access to value
* @param model smithy model
* @param writer go writer
* @param member API shape member to determine wrapping check with
* @param operand string of text with access to value
* @param ignoreEmptyString if empty strings also checked
* @param lambda lambda to run
* @param lambda lambda to run
*/
public static void writeIfNonZeroValue(
ProtocolGenerator.GenerationContext context,
Model model,
GoWriter writer,
MemberShape member,
String operand,
Boolean ignoreEmptyString,
Runnable lambda
) {
Shape targetShape = context.getModel().expectShape(member.getTarget());
Shape container = context.getModel().expectShape(member.getContainer());
Shape targetShape = model.expectShape(member.getTarget());
Shape container = model.expectShape(member.getContainer());

// default to empty block for variable scoping with not value check.
String check = "{";

if (GoPointableIndex.of(context.getModel()).isNillable(member)) {
if (GoPointableIndex.of(model).isNillable(member)) {
if (!ignoreEmptyString && targetShape.getType() == ShapeType.STRING) {
check = String.format("if %s != nil && len(*%s) > 0 {", operand, operand);
} else {
Expand Down Expand Up @@ -88,112 +89,116 @@ public static void writeIfNonZeroValue(

/**
* Writes non-zero conditional checks around a lambda specific to the member shape type.
*
* <p>
* Ignores empty strings of string pointers, and nested within list and maps.
*
* @param context generation context
* @param writer go writer
* @param member API shape member to determine wrapping check with
* @param model smithy model
* @param writer go writer
* @param member API shape member to determine wrapping check with
* @param operand string of text with access to value
* @param lambda lambda to run
* @param lambda lambda to run
*/
public static void writeIfNonZeroValue(
ProtocolGenerator.GenerationContext context,
Model model,
GoWriter writer,
MemberShape member,
String operand,
Runnable lambda
) {
writeIfNonZeroValue(context, writer, member, operand, true, lambda);
writeIfNonZeroValue(model, writer, member, operand, true, lambda);
}

/**
* Writes non-zero conditional check around a lambda specific to a member of a container.
*
* <p>
* Ignores empty strings of string pointers, and members nested within list and maps.
*
* @param context generation context
* @param writer go writer
* @param member API shape member to determine wrapping check with
* @param container operand of source member is a part of.
* @param lambda lambda to run
* @param model smithy model
* @param symbolProvider symbol provider
* @param writer go writer
* @param member API shape member to determine wrapping check with
* @param container operand of source member is a part of.
* @param lambda lambda to run
*/
public static void writeIfNonZeroValueMember(
ProtocolGenerator.GenerationContext context,
Model model,
SymbolProvider symbolProvider,
GoWriter writer,
MemberShape member,
String container,
Consumer<String> lambda
) {
String memberName = context.getSymbolProvider().toMemberName(member);
String memberName = symbolProvider.toMemberName(member);
String operand = container + "." + memberName;

writeIfNonZeroValue(context, writer, member, operand, true, () -> {
writeIfNonZeroValue(model, writer, member, operand, true, () -> {
lambda.accept(operand);
});
}

/**
* Writes non-zero conditional check around a lambda specific to a member of a container.
*
* <p>
* Note: Collections and map member values by default will not have individual checks on member values. To check
* not empty strings set the ignoreEmptyString to false.
*
* @param context generation context
* @param writer go writer
* @param member API shape member to determine wrapping check with
* @param container operand of source member is a part of.
* @param model smithy model
* @param symbolProvider symbol provider
* @param writer go writer
* @param member API shape member to determine wrapping check with
* @param container operand of source member is a part of.
* @param ignoreEmptyString if empty strings also checked
* @param lambda lambda to run
* @param lambda lambda to run
*/
public static void writeIfNonZeroValueMember(
ProtocolGenerator.GenerationContext context,
Model model,
SymbolProvider symbolProvider,
GoWriter writer,
MemberShape member,
String container,
boolean ignoreEmptyString,
Consumer<String> lambda
) {
String memberName = context.getSymbolProvider().toMemberName(member);
String memberName = symbolProvider.toMemberName(member);
String operand = container + "." + memberName;

writeIfNonZeroValue(context, writer, member, operand, ignoreEmptyString, () -> {
writeIfNonZeroValue(model, writer, member, operand, ignoreEmptyString, () -> {
lambda.accept(operand);
});
}

/**
* Writes zero conditional checks around a lambda specific to the member shape type.
*
* <p>
* Members with containers of Collection and map shapes, will ignore the lambda block
* and not call it. Optionally will ignore empty strings based on the ignoreEmptyString flag.
*
* <p>
* Non-nillable shapes other than Enum, Boolean, and Number will ignore the lambda block. Optionally will ignore
* empty strings based on the ignoreEmptyString flag.
*
* <p>
* Note: Collections and map member values by default will not have individual checks on member values. To check
* for empty strings set the ignoreEmptyString to false.
*
* @param context generation context
* @param writer go writer
* @param member API shape member to determine wrapping check with
* @param operand string of text with access to value
* @param model smithy model
* @param writer go writer
* @param member API shape member to determine wrapping check with
* @param operand string of text with access to value
* @param ignoreEmptyString if empty strings also checked
* @param lambda lambda to run
* @param lambda lambda to run
*/
public static void writeIfZeroValue(
ProtocolGenerator.GenerationContext context,
Model model,
GoWriter writer,
MemberShape member,
String operand,
Boolean ignoreEmptyString,
Runnable lambda
) {
Shape targetShape = context.getModel().expectShape(member.getTarget());
Shape container = context.getModel().expectShape(member.getContainer());
Shape targetShape = model.expectShape(member.getTarget());
Shape container = model.expectShape(member.getContainer());

String check = "{";
if (GoPointableIndex.of(context.getModel()).isNillable(member)) {
if (GoPointableIndex.of(model).isNillable(member)) {
if (!ignoreEmptyString && targetShape.getType() == ShapeType.STRING) {
check = String.format("if %s == nil || len(*%s) == 0 {", operand, operand);
} else {
Expand Down Expand Up @@ -230,75 +235,79 @@ public static void writeIfZeroValue(

/**
* Writes zero conditional checks around a lambda specific to the member shape type.
*
* <p>
* Ignores empty strings of string pointers, and members nested within list and maps.
*
* @param context generation context
* @param writer go writer
* @param member API shape member to determine wrapping check with
* @param model smithy model
* @param writer go writer
* @param member API shape member to determine wrapping check with
* @param operand string of text with access to value
* @param lambda lambda to run
* @param lambda lambda to run
*/
public static void writeIfZeroValue(
ProtocolGenerator.GenerationContext context,
Model model,
GoWriter writer,
MemberShape member,
String operand,
Runnable lambda
) {
writeIfZeroValue(context, writer, member, operand, true, lambda);
writeIfZeroValue(model, writer, member, operand, true, lambda);
}

/**
* Writes zero conditional check around a lambda specific to a member of a container.
*
* <p>
* Ignores empty strings of string pointers, and members nested within list and maps.
*
* @param context generation context
* @param writer go writer
* @param member API shape member to determine wrapping check with
* @param container operand of source member is a part of.
* @param lambda lambda to run
* @param model smithy model
* @param symbolProvider symbol provider
* @param writer go writer
* @param member API shape member to determine wrapping check with
* @param container operand of source member is a part of.
* @param lambda lambda to run
*/
public static void writeIfZeroValueMember(
ProtocolGenerator.GenerationContext context,
Model model,
SymbolProvider symbolProvider,
GoWriter writer,
MemberShape member,
String container,
Consumer<String> lambda
) {
String memberName = context.getSymbolProvider().toMemberName(member);
String memberName = symbolProvider.toMemberName(member);
String operand = container + "." + memberName;

writeIfZeroValue(context, writer, member, operand, () -> {
writeIfZeroValue(model, writer, member, operand, () -> {
lambda.accept(operand);
});
}

/**
* Writes zero conditional check around a lambda specific to a member of a container.
*
* <p>
* Ignores empty strings of string pointers, and members nested within list and maps.
*
* @param context generation context
* @param writer go writer
* @param member API shape member to determine wrapping check with
* @param container operand of source member is a part of.
* @param model smithy model
* @param symbolProvider symbol provider
* @param writer go writer
* @param member API shape member to determine wrapping check with
* @param container operand of source member is a part of.
* @param ignoreEmptyString if empty strings also checked
* @param lambda lambda to run
* @param lambda lambda to run
*/
public static void writeIfZeroValueMember(
ProtocolGenerator.GenerationContext context,
Model model,
SymbolProvider symbolProvider,
GoWriter writer,
MemberShape member,
String container,
boolean ignoreEmptyString,
Consumer<String> lambda
) {
String memberName = context.getSymbolProvider().toMemberName(member);
String memberName = symbolProvider.toMemberName(member);
String operand = container + "." + memberName;

writeIfZeroValue(context, writer, member, operand, ignoreEmptyString, () -> {
writeIfZeroValue(model, writer, member, operand, ignoreEmptyString, () -> {
lambda.accept(operand);
});
}
Expand Down
Loading