Skip to content

Instantly share code, notes, and snippets.

@3llomi
Last active October 5, 2022 14:06
Show Gist options
  • Save 3llomi/4079500a9842ad32e413bac23fba070e to your computer and use it in GitHub Desktop.
Save 3llomi/4079500a9842ad32e413bac23fba070e to your computer and use it in GitHub Desktop.
Kotlin Coroutines Extensions for E3Kit
import com.virgilsecurity.common.callback.OnCompleteListener
import com.virgilsecurity.common.callback.OnResultListener
import com.virgilsecurity.common.model.Completable
import com.virgilsecurity.common.model.Result
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.CoroutineScope
suspend fun Completable.await(scope: CoroutineScope) {
val deferred = CompletableDeferred<Unit>()
addCallback(object : OnCompleteListener {
override fun onError(throwable: Throwable) {
deferred.completeExceptionally(throwable)
}
override fun onSuccess() {
deferred.complete(Unit)
}
}, scope)
return deferred.await()
}
suspend fun <T> Result<T>.await(scope: CoroutineScope): T {
val deferred = CompletableDeferred<T>()
addCallback(object : OnResultListener<T> {
override fun onError(throwable: Throwable) {
deferred.completeExceptionally(throwable)
}
override fun onSuccess(result: T) {
deferred.complete(result)
}
}, scope)
return deferred.await()
}
//Using Completable extension
eThree.register().await(coroutineScope)
//Using Result extension
val fromCard = ethree.findUser(fromId).await(this)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment