in codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/integration/Waiters2.java [656:722]
private void writeWaiterComparator(GoWriter writer, Acceptor acceptor, PathComparator comparator,
GoJmespathExpressionGenerator.Variable searchResult) {
switch (comparator) {
case STRING_EQUALS:
writer.write("var pathValue string");
if (!isPointable(searchResult.type())) {
writer.write("pathValue = string($L)", searchResult.ident());
} else {
writer.write("""
if $1L != nil {
pathValue = string(*$1L)
}""", searchResult.ident());
}
writer.openBlock("if pathValue == expectedValue {", "}", () -> {
writeMatchedAcceptorReturn(writer, acceptor);
});
break;
case BOOLEAN_EQUALS:
writer.addUseImports(SmithyGoDependency.STRCONV);
writer.write("bv, err := strconv.ParseBool($L)", "expectedValue");
writer.write(
"if err != nil { return false, "
+ "fmt.Errorf(\"error parsing boolean from string %w\", err)}");
writer.openBlock("if $L == bv {", "}", searchResult.ident(), () -> {
writeMatchedAcceptorReturn(writer, acceptor);
});
break;
case ALL_STRING_EQUALS:
writer.write("match := len($L) > 0", searchResult.ident());
writer.openBlock("for _, v := range $L {", "}", searchResult.ident(), () -> {
writer.write("""
if string(v) != expectedValue {
match = false
break
}""");
});
writer.write("");
writer.openBlock("if match {", "}", () -> {
writeMatchedAcceptorReturn(writer, acceptor);
});
break;
case ANY_STRING_EQUALS:
writer.write("var match bool");
writer.openBlock("for _, v := range $L {", "}", searchResult.ident(), () -> {
writer.write("""
if string(v) == expectedValue {
match = true
break
}""");
});
writer.write("");
writer.openBlock("if match {", "}", () -> {
writeMatchedAcceptorReturn(writer, acceptor);
});
break;
default:
throw new CodegenException(
String.format("Found unknown waiter path comparator, %s", comparator.toString()));
}
}