package org.openrs2.net import io.netty.util.concurrent.Future import java.util.concurrent.CompletableFuture import kotlin.coroutines.resume import kotlin.coroutines.resumeWithException import kotlin.coroutines.suspendCoroutine public suspend fun Future.awaitSuspend(): V { if (isDone) { if (isSuccess) { return now } else { throw cause() } } return suspendCoroutine { continuation -> addListener { if (isSuccess) { continuation.resume(now) } else { continuation.resumeWithException(cause()) } } } } public fun Future.asCompletableFuture(): CompletableFuture { if (isDone) { return if (isSuccess) { CompletableFuture.completedFuture(now) } else { CompletableFuture.failedFuture(cause()) } } val future = CompletableFuture() addListener { if (isSuccess) { future.complete(now) } else { future.completeExceptionally(cause()) } } return future }