parent
c6aeb9619f
commit
fd2160c7a6
@ -189,6 +189,23 @@ public inline fun <V, E> Result<V, E>.toErrorIf(predicate: (V) -> Boolean, trans
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the supplied [error] if this [Result] is [Ok] and the [value][Ok.value] is `null`,
|
||||||
|
* otherwise this [Result].
|
||||||
|
*
|
||||||
|
* @see [toErrorIf]
|
||||||
|
*/
|
||||||
|
public inline fun <V, E> Result<V, E>.toErrorIfNull(error: () -> E): Result<V, E> {
|
||||||
|
contract {
|
||||||
|
callsInPlace(error, InvocationKind.AT_MOST_ONCE)
|
||||||
|
}
|
||||||
|
|
||||||
|
return toErrorIf(
|
||||||
|
{ it == null },
|
||||||
|
{ error() }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the [transformation][transform] of the [value][Ok.value] if this [Result] is [Ok]
|
* Returns the [transformation][transform] of the [value][Ok.value] if this [Result] is [Ok]
|
||||||
* and _does not_ satisfy the given [predicate], otherwise this [Result].
|
* and _does not_ satisfy the given [predicate], otherwise this [Result].
|
||||||
@ -210,3 +227,20 @@ public inline fun <V, E> Result<V, E>.toErrorUnless(predicate: (V) -> Boolean, t
|
|||||||
is Err -> this
|
is Err -> this
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the supplied [error] unless this [Result] is [Ok] and the [value][Ok.value] is `null`,
|
||||||
|
* otherwise this [Result].
|
||||||
|
*
|
||||||
|
* @see [toErrorUnless]
|
||||||
|
*/
|
||||||
|
public inline fun <V, E> Result<V, E>.toErrorUnlessNull(error: () -> E): Result<V, E> {
|
||||||
|
contract {
|
||||||
|
callsInPlace(error, InvocationKind.AT_MOST_ONCE)
|
||||||
|
}
|
||||||
|
|
||||||
|
return toErrorUnless(
|
||||||
|
{ it == null },
|
||||||
|
{ error() }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
@ -2,6 +2,7 @@ package com.github.michaelbull.result
|
|||||||
|
|
||||||
import kotlin.test.Test
|
import kotlin.test.Test
|
||||||
import kotlin.test.assertEquals
|
import kotlin.test.assertEquals
|
||||||
|
import kotlin.test.assertNull
|
||||||
import kotlin.test.assertSame
|
import kotlin.test.assertSame
|
||||||
|
|
||||||
class MapTest {
|
class MapTest {
|
||||||
@ -174,4 +175,79 @@ class MapTest {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ToErrorIfNull {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun returnsValueIfOk() {
|
||||||
|
val result = Ok("a").toErrorIfNull { "b" }
|
||||||
|
|
||||||
|
result as Ok
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
expected = "a",
|
||||||
|
actual = result.value
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun returnsTransformedErrorIfNull() {
|
||||||
|
val result = Ok(null).toErrorIfNull { "a" }
|
||||||
|
|
||||||
|
result as Err
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
expected = "a",
|
||||||
|
actual = result.error
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun returnsErrorIfErr() {
|
||||||
|
val result = Err("a").toErrorIfNull { "b" }
|
||||||
|
|
||||||
|
result as Err
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
expected = "a",
|
||||||
|
actual = result.error
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ToErrorUnlessNull {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun returnsTransformedErrorIfNotNull() {
|
||||||
|
val result = Ok("a").toErrorUnlessNull { "b" }
|
||||||
|
|
||||||
|
result as Err
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
expected = "b",
|
||||||
|
actual = result.error
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun returnsValueIfNull() {
|
||||||
|
val result = Ok(null).toErrorUnlessNull { "a" }
|
||||||
|
|
||||||
|
result as Ok
|
||||||
|
|
||||||
|
assertNull(result.value)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun returnsErrorIfErr() {
|
||||||
|
val result = Err("a").toErrorUnlessNull { "b" }
|
||||||
|
|
||||||
|
result as Err
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
expected = "a",
|
||||||
|
actual = result.error
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user