SuccessOrFailure.getOrDefault

This commit is contained in:
Roman Elizarov
2018-07-24 13:00:58 +03:00
parent b6bf1604ea
commit 4fe2730f4a
2 changed files with 11 additions and 0 deletions
@@ -39,6 +39,7 @@ class SuccessOrFailureTest {
assertEquals(v, ok.getOrElse { throw it })
assertEquals(v, ok.getOrNull())
assertEquals(v, ok.getOrElse { null })
assertEquals(v, ok.getOrDefault("DEF"))
assertEquals(v, ok.getOrElse { "EX:$it" })
assertEquals("V:$v", ok.fold({ "V:$it" }, { "EX:$it" }))
assertEquals(null, ok.exceptionOrNull())
@@ -68,6 +69,7 @@ class SuccessOrFailureTest {
assertFails { fail.getOrElse { throw it } }
assertEquals(null, fail.getOrNull())
assertEquals(null, fail.getOrElse { null })
assertEquals("DEF", fail.getOrDefault("DEF"))
assertEquals("EX:java.lang.IllegalStateException: $msg", fail.getOrElse { "EX:$it" })
assertEquals("EX:java.lang.IllegalStateException: $msg", fail.fold({ "V:$it" }, { "EX:$it" }))
assertEquals(msg, fail.exceptionOrNull()!!.message)
@@ -180,6 +180,15 @@ public inline class SuccessOrFailure<out T> @PublishedApi internal constructor(
}
}
/**
* Returns the encapsulated value if this instance represents [success][SuccessOrFailure.isSuccess] or the
* [defaultValue] if it is [failure][SuccessOrFailure.isFailure].
*
* This function is shorthand for `getOrElse { defaultValue }` (see [getOrElse]).
*/
public fun <R, T : R> SuccessOrFailure<T>.getOrDefault(defaultValue: R): R =
getOrElse { defaultValue }
/**
* Returns the the result of [onSuccess] for encapsulated value if this instance represents [success][SuccessOrFailure.isSuccess]
* or the result of [onFailure] function for encapsulated exception if it is [failure][SuccessOrFailure.isFailure].