From 4fe2730f4ad37c5a89379177e0c081cc0c848522 Mon Sep 17 00:00:00 2001 From: Roman Elizarov Date: Tue, 24 Jul 2018 13:00:58 +0300 Subject: [PATCH] SuccessOrFailure.getOrDefault --- .../stdlib/coroutines/jvm/test/SuccessOrFailureTest.kt | 2 ++ .../stdlib/coroutines/src/kotlin/SuccessOrFailure.kt | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/libraries/stdlib/coroutines/jvm/test/SuccessOrFailureTest.kt b/libraries/stdlib/coroutines/jvm/test/SuccessOrFailureTest.kt index efe59412c38..94952a3002c 100644 --- a/libraries/stdlib/coroutines/jvm/test/SuccessOrFailureTest.kt +++ b/libraries/stdlib/coroutines/jvm/test/SuccessOrFailureTest.kt @@ -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) diff --git a/libraries/stdlib/coroutines/src/kotlin/SuccessOrFailure.kt b/libraries/stdlib/coroutines/src/kotlin/SuccessOrFailure.kt index ed4b57a5932..3513d027868 100644 --- a/libraries/stdlib/coroutines/src/kotlin/SuccessOrFailure.kt +++ b/libraries/stdlib/coroutines/src/kotlin/SuccessOrFailure.kt @@ -180,6 +180,15 @@ public inline class SuccessOrFailure @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 SuccessOrFailure.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].