refactor: use runSuspendCatching
from kotlin-result
This commit is contained in:
parent
5f3aa611c9
commit
41c86b67f3
4 changed files with 5 additions and 54 deletions
|
@ -1,51 +0,0 @@
|
||||||
@file:OptIn(ExperimentalContracts::class)
|
|
||||||
@file:Suppress("RedundantSuspendModifier")
|
|
||||||
|
|
||||||
package app.passwordstore.util.coroutines
|
|
||||||
|
|
||||||
import com.github.michaelbull.result.Err
|
|
||||||
import com.github.michaelbull.result.Ok
|
|
||||||
import com.github.michaelbull.result.Result
|
|
||||||
import kotlin.contracts.ExperimentalContracts
|
|
||||||
import kotlin.contracts.InvocationKind
|
|
||||||
import kotlin.contracts.contract
|
|
||||||
import kotlinx.coroutines.CancellationException
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Calls the specified function [block] and returns its encapsulated result if invocation was
|
|
||||||
* successful, catching any [Throwable] except [CancellationException] that was thrown from the
|
|
||||||
* [block] function execution and encapsulating it as a failure.
|
|
||||||
*/
|
|
||||||
@OptIn(ExperimentalContracts::class)
|
|
||||||
public suspend inline fun <V> runSuspendCatching(block: () -> V): Result<V, Throwable> {
|
|
||||||
contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
|
|
||||||
|
|
||||||
return try {
|
|
||||||
Ok(block())
|
|
||||||
} catch (e: CancellationException) {
|
|
||||||
throw e
|
|
||||||
} catch (e: Throwable) {
|
|
||||||
Err(e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Calls the specified function [block] with [this] value as its receiver and returns its
|
|
||||||
* encapsulated result if invocation was successful, catching any [Throwable] except
|
|
||||||
* [CancellationException] that was thrown from the [block] function execution and encapsulating it
|
|
||||||
* as a failure.
|
|
||||||
*/
|
|
||||||
@OptIn(ExperimentalContracts::class)
|
|
||||||
public suspend inline infix fun <T, V> T.runSuspendCatching(
|
|
||||||
block: T.() -> V
|
|
||||||
): Result<V, Throwable> {
|
|
||||||
contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
|
|
||||||
|
|
||||||
return try {
|
|
||||||
Ok(block())
|
|
||||||
} catch (e: CancellationException) {
|
|
||||||
throw e
|
|
||||||
} catch (e: Throwable) {
|
|
||||||
Err(e)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -6,11 +6,11 @@ plugins { id("com.github.android-password-store.kotlin-jvm-library") }
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
api(projects.crypto.common)
|
api(projects.crypto.common)
|
||||||
implementation(projects.coroutineUtils)
|
|
||||||
implementation(libs.androidx.annotation)
|
implementation(libs.androidx.annotation)
|
||||||
implementation(libs.dagger.hilt.core)
|
implementation(libs.dagger.hilt.core)
|
||||||
implementation(libs.kotlinx.coroutines.core)
|
implementation(libs.kotlinx.coroutines.core)
|
||||||
implementation(libs.thirdparty.kotlinResult)
|
implementation(libs.thirdparty.kotlinResult)
|
||||||
|
implementation(libs.thirdparty.kotlinResult.coroutines)
|
||||||
implementation(libs.thirdparty.pgpainless)
|
implementation(libs.thirdparty.pgpainless)
|
||||||
testImplementation(libs.bundles.testDependencies)
|
testImplementation(libs.bundles.testDependencies)
|
||||||
testImplementation(libs.kotlinx.coroutines.test)
|
testImplementation(libs.kotlinx.coroutines.test)
|
||||||
|
|
|
@ -17,8 +17,8 @@ import app.passwordstore.crypto.errors.KeyDirectoryUnavailableException
|
||||||
import app.passwordstore.crypto.errors.KeyNotFoundException
|
import app.passwordstore.crypto.errors.KeyNotFoundException
|
||||||
import app.passwordstore.crypto.errors.NoKeysAvailableException
|
import app.passwordstore.crypto.errors.NoKeysAvailableException
|
||||||
import app.passwordstore.crypto.errors.UnusableKeyException
|
import app.passwordstore.crypto.errors.UnusableKeyException
|
||||||
import app.passwordstore.util.coroutines.runSuspendCatching
|
|
||||||
import com.github.michaelbull.result.Result
|
import com.github.michaelbull.result.Result
|
||||||
|
import com.github.michaelbull.result.coroutines.runSuspendCatching
|
||||||
import com.github.michaelbull.result.unwrap
|
import com.github.michaelbull.result.unwrap
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
|
@ -9,6 +9,7 @@ coroutines = "1.7.3"
|
||||||
flowbinding = "1.2.0"
|
flowbinding = "1.2.0"
|
||||||
hilt = "2.48"
|
hilt = "2.48"
|
||||||
kotlin = "1.9.10"
|
kotlin = "1.9.10"
|
||||||
|
kotlinResult = "1.1.18"
|
||||||
leakcanary = "2.12"
|
leakcanary = "2.12"
|
||||||
lifecycle = "2.6.2"
|
lifecycle = "2.6.2"
|
||||||
|
|
||||||
|
@ -81,7 +82,8 @@ thirdparty-flowbinding-android = { module = "io.github.reactivecircus.flowbindin
|
||||||
# JGit upgrades also raise its minimum Java runtime requirements that we cannot satisfy on Android
|
# JGit upgrades also raise its minimum Java runtime requirements that we cannot satisfy on Android
|
||||||
# noinspection GradleDependency
|
# noinspection GradleDependency
|
||||||
thirdparty-jgit = "org.eclipse.jgit:org.eclipse.jgit:3.7.1.201504261725-r"
|
thirdparty-jgit = "org.eclipse.jgit:org.eclipse.jgit:3.7.1.201504261725-r"
|
||||||
thirdparty-kotlinResult = "com.michael-bull.kotlin-result:kotlin-result:1.1.18"
|
thirdparty-kotlinResult = { module = "com.michael-bull.kotlin-result:kotlin-result", version.ref = "kotlinResult" }
|
||||||
|
thirdparty-kotlinResult-coroutines = { module = "com.michael-bull.kotlin-result:kotlin-result-coroutines", version.ref = "kotlinResult" }
|
||||||
thirdparty-leakcanary-core = { module = "com.squareup.leakcanary:leakcanary-android-core", version.ref = "leakcanary" }
|
thirdparty-leakcanary-core = { module = "com.squareup.leakcanary:leakcanary-android-core", version.ref = "leakcanary" }
|
||||||
thirdparty-logcat = "com.squareup.logcat:logcat:0.1"
|
thirdparty-logcat = "com.squareup.logcat:logcat:0.1"
|
||||||
thirdparty-modernAndroidPrefs = "de.maxr1998:modernandroidpreferences:2.3.2"
|
thirdparty-modernAndroidPrefs = "de.maxr1998:modernandroidpreferences:2.3.2"
|
||||||
|
|
Loading…
Reference in a new issue