static void reportSuccessOrFailure(CircuitBreakerCallback callback,
                                       CompletionStage<@Nullable CircuitBreakerDecision> future,
                                       ClientRequestContext ctx, @Nullable Throwable throwable) {
        future.handle((decision, unused) -> {
            if (decision != null) {
                if (decision == CircuitBreakerDecision.success() || decision == CircuitBreakerDecision.next()) {
                    callback.onSuccess(ctx);
                } else if (decision == CircuitBreakerDecision.failure()) {
                    callback.onFailure(ctx, throwable);
                } else {
                    // Ignore, does not count as a success nor failure.
                }
            }
            return null;
        }).exceptionally(CompletionActions::log);
    }
Reports a success or a failure to the specified {@link CircuitBreaker} according to the completed value
of the specified {@code future}. If the completed value is {@link CircuitBreakerDecision#ignore()},
this doesn't do anything.
core/src/main/java/com/linecorp/armeria/client/circuitbreaker/AbstractCircuitBreakerClient.java