@VisibleForTesting
    static RoutingPredicate<HttpHeaders> ofHeaders(String headersPredicate) {
        requireNonNull(headersPredicate, "headersPredicate");
        return of(headersPredicate, HttpHeaderNames::of, name -> headers -> headers.contains(name),
                  (name, value) -> headers -> headers.getAll(name).stream().anyMatch(value::equals));
    }
Patterns used to parse a given predicate. The predicate can be one of the following forms:
<ul>
    <li>{@code some-name=some-value} which means that the request must have a
    {@code some-name=some-value} header or parameter</li>
    <li>{@code some-name!=some-value} which means that the request must not have a
    {@code some-name=some-value} header or parameter</li>
    <li>{@code some-name} which means that the request must contain a {@code some-name} header or
    parameter</li>
    <li>{@code !some-name} which means that the request must not contain a {@code some-name} header or
    parameter</li>
    <li>{@code some-name=some-value || some-other-value} which means that the request must have
    a {@code some-name=some-value} or a {@code some-other-value} header or parameter</li>
</ul>
core/src/main/java/com/linecorp/armeria/server/RoutingPredicate.java