docs: protected <T extends RaftRequest, U extends RaftResponse> CompletableFuture<U> forward(T request, BiFunction<MemberId, T, CompletableFuture<U>> function) {
      CompletableFuture<U> future = new CompletableFuture<>();
      DefaultRaftMember leader = raft.getLeader();
      if (leader == null) {
        return Futures.exceptionalFuture(new RaftException.NoLeader("No leader found"));
      }
  
      function.apply(leader.memberId(), request).whenCompleteAsync((response, error) -> {
        if (error == null) {
          future.complete(response);
        } else {
          future.completeExceptionally(error);
        }
      }, raft.getThreadContext());
      return future;
    }