private AttributeComparator parseComparator()

in smithy-model/src/main/java/software/amazon/smithy/model/selector/SelectorParser.java [289:355]


    private AttributeComparator parseComparator(char next) {
        AttributeComparator comparator;
        switch (next) {
            case '=': // =
                comparator = AttributeComparator.EQUALS;
                break;
            case '!':
                expect('='); // !=
                comparator = AttributeComparator.NOT_EQUALS;
                break;
            case '^':
                expect('='); // ^=
                comparator = AttributeComparator.STARTS_WITH;
                break;
            case '$':
                expect('='); // $=
                comparator = AttributeComparator.ENDS_WITH;
                break;
            case '*':
                expect('='); // *=
                comparator = AttributeComparator.CONTAINS;
                break;
            case '?':
                expect('='); // ?=
                comparator = AttributeComparator.EXISTS;
                break;
            case '>':
                if (peek() == '=') { // >=
                    skip();
                    comparator = AttributeComparator.GTE;
                } else { // >
                    comparator = AttributeComparator.GT;
                }
                break;
            case '<':
                if (peek() == '=') { // <=
                    skip();
                    comparator = AttributeComparator.LTE;
                } else { // <
                    comparator = AttributeComparator.LT;
                }
                break;
            case '{': // projection comparators
                char nextSet = expect('<', '=', '!');
                if (nextSet == '<') {
                    if (peek() == '<') {
                        expect('<'); // {<<}
                        comparator = AttributeComparator.PROPER_SUBSET;
                    } else { // {<}
                        comparator = AttributeComparator.SUBSET;
                    }
                } else if (nextSet == '=') { // {=}
                    comparator = AttributeComparator.PROJECTION_EQUALS;
                } else { // {!=}
                    expect('=');
                    comparator = AttributeComparator.PROJECTION_NOT_EQUALS;
                }
                expect('}');
                break;
            default:
                // Unreachable
                throw syntax("Unknown attribute comparator token '" + next + "'");
        }

        ws();
        return comparator;
    }