diff --git a/build.gradle.kts b/build.gradle.kts index 19b4327..88b64ba 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -223,6 +223,11 @@ subprojects { name.set("Matthias Geisler") url.set("https://github.com/bitPogo") } + + contributor { + name.set("Kirill Zhukov") + url.set("https://github.com/kirillzh") + } } scm { diff --git a/kotlin-result/src/commonMain/kotlin/com/github/michaelbull/result/Map.kt b/kotlin-result/src/commonMain/kotlin/com/github/michaelbull/result/Map.kt index fdbfc2f..cc83f74 100644 --- a/kotlin-result/src/commonMain/kotlin/com/github/michaelbull/result/Map.kt +++ b/kotlin-result/src/commonMain/kotlin/com/github/michaelbull/result/Map.kt @@ -195,15 +195,19 @@ public inline fun Result.toErrorIf(predicate: (V) -> Boolean, trans * * @see [toErrorIf] */ -public inline fun Result.toErrorIfNull(error: () -> E): Result { +public inline fun Result.toErrorIfNull(error: () -> E): Result { contract { callsInPlace(error, InvocationKind.AT_MOST_ONCE) } - return toErrorIf( - { it == null }, - { error() } - ) + return when (this) { + is Ok -> if(value == null) { + Err(error()) + } else { + Ok(value) + } + is Err -> this + } } /** @@ -239,8 +243,12 @@ public inline fun Result.toErrorUnlessNull(error: () -> E): Result< callsInPlace(error, InvocationKind.AT_MOST_ONCE) } - return toErrorUnless( - { it == null }, - { error() } - ) + return when (this) { + is Ok -> if (value == null) { + this + } else { + Err(error()) + } + is Err -> Err(error()) + } } diff --git a/kotlin-result/src/commonTest/kotlin/com/github/michaelbull/result/MapTest.kt b/kotlin-result/src/commonTest/kotlin/com/github/michaelbull/result/MapTest.kt index 51c22a2..4e073f6 100644 --- a/kotlin-result/src/commonTest/kotlin/com/github/michaelbull/result/MapTest.kt +++ b/kotlin-result/src/commonTest/kotlin/com/github/michaelbull/result/MapTest.kt @@ -192,7 +192,7 @@ class MapTest { @Test fun returnsTransformedErrorIfNull() { - val result = Ok(null).toErrorIfNull { "a" } + val result: Result = Ok(null).toErrorIfNull { "a" } result as Err @@ -245,7 +245,7 @@ class MapTest { result as Err assertEquals( - expected = "a", + expected = "b", actual = result.error ) }