Skip to content

Instantly share code, notes, and snippets.

View msya's full-sized avatar

Mohit msya

View GitHub Profile
class VimeoRepositoryImpl(
val vimeoClient: VimeoClient,
val factory: SuspendFunctionFactory
): VimeoRepository {
override suspend fun getDocument(documentUri: String): Result<Document> =
factory.convertToSuspendFunction(vimeoClient::getDocument)(documentUri)
}
}
interface SuspendFunctionFactory {
fun <A, T> convertToSuspendFunction (
fn: (A, VimeoCallback<T>) -> Call<T>
): suspend (A)-> Result<T>
}
class VimeoClientSuspendFunctionFactory: SuspendFunctionFactory {
val suspendFunction = convertToSuspendFunction(vimeoClient::getDocument)
val result: Result<Document> = suspendFunction(documentUri)
fun <A, T> convertToSuspendFunction (
fn: (A, VimeoCallback<T>) -> Call<T>
): suspend (A)-> Result<T> = { a ->
suspendCancellableCoroutine { cont ->
val call = fn(a, object : VimeoCallback<T>() {
override fun success(t: T) {
cont.resume(Result.Success(t))
}
suspend fun getDocument(documentUri: String): Result<Document> =
suspendCancellableCoroutine<Result<Document>> { cont ->
val call = vimeoClient.getDocument(documentUri, object :VimeoCallback<Document>() {
override fun success(document: Document) {
cont.resume(Result.Success(document))
}
override fun failure(error: VimeoError) {
Call<Document> getDocument(@NotNull String uri, @NotNull VimeoCallback<Document> callback)
@msya
msya / step2.kt
Last active March 22, 2019 15:48
suspend fun getDocument(documentUri: String): Result<Document> {
return suspendCancellableCoroutine<Result<Document>> { cont ->
}
}
@msya
msya / step1.kt
Last active March 22, 2019 15:39
suspend fun getDocument(documentUri: String): Result<Document> { }
sealed class Result<T> {
data class Success<T>(val data: T): Result<T>()
data class Error<T>(val error: VimeoError): Result<T>()
}
suspend fun <T> suspendCancellableCoroutine(
block: (CancellableContinuation<T>) -> Unit
): T
vimeoClient.getDocument(documentUri, object: VimeoCallback<Document>() {
override fun success(document: Document) { }
override fun failure(error: VimeoError) { }
})