private void writeWaiterComparator()

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()));
        }
    }