private CircuitBreakerRuleWithContent<T> build(CircuitBreakerDecision decision) {
        final BiFunction<? super ClientRequestContext, ? super T,
                ? extends CompletionStage<Boolean>> responseFilter = responseFilter();
        final boolean hasResponseFilter = responseFilter != null;
        final BiFunction<? super ClientRequestContext, ? super Throwable, Boolean> ruleFilter =
                RuleFilter.of(requestHeadersFilter(), responseHeadersFilter(),
                              responseTrailersFilter(), grpcTrailersFilter(),
                              exceptionFilter(), totalDurationFilter(),
                              hasResponseFilter);
        final CircuitBreakerRule first = CircuitBreakerRuleBuilder.build(
                ruleFilter, decision, requiresResponseTrailers());
        if (!hasResponseFilter) {
            return CircuitBreakerRuleUtil.fromCircuitBreakerRule(first);
        }

        final CircuitBreakerRuleWithContent<T> second = (ctx, content, cause) -> {
            if (content == null) {
                return NEXT_DECISION;
            }
            assert responseFilter != null;
            return responseFilter.apply(ctx, content)
                                 .handle((matched, cause0) -> {
                                     if (cause0 != null) {
                                         return CircuitBreakerDecision.next();
                                     }
                                     return matched ? decision : CircuitBreakerDecision.next();
                                 });
        };
        return CircuitBreakerRuleUtil.orElse(first, second);
    }
Returns a newly created {@link CircuitBreakerRuleWithContent} that ignores a {@link Response} when
the rule matches.
core/src/main/java/com/linecorp/armeria/client/circuitbreaker/CircuitBreakerRuleWithContentBuilder.java