From feb7239189e73733e0527da7ffc1751a8dda9d15 Mon Sep 17 00:00:00 2001 From: Roman Elizarov Date: Wed, 12 Sep 2018 23:36:46 +0300 Subject: [PATCH] Removed SuccessOrFailure. Left deprecated/error typealias to Result for 1.3-Mx users. --- .../coroutines/src/kotlin/SuccessOrFailure.kt | 128 +----------------- 1 file changed, 7 insertions(+), 121 deletions(-) diff --git a/libraries/stdlib/coroutines/src/kotlin/SuccessOrFailure.kt b/libraries/stdlib/coroutines/src/kotlin/SuccessOrFailure.kt index 64326d12b54..f7e05446fe3 100644 --- a/libraries/stdlib/coroutines/src/kotlin/SuccessOrFailure.kt +++ b/libraries/stdlib/coroutines/src/kotlin/SuccessOrFailure.kt @@ -3,130 +3,16 @@ * that can be found in the license/LICENSE.txt file. */ -// todo: Figure out how to avoid suppressing errors, move suppressions where they are needed. -@file:Suppress( - "UNCHECKED_CAST", - "RedundantVisibilityModifier", - "NON_PUBLIC_PRIMARY_CONSTRUCTOR_OF_INLINE_CLASS", - "UNSUPPORTED_FEATURE" -) - package kotlin -import kotlin.contracts.* -import kotlin.internal.InlineOnly -import kotlin.jvm.JvmField - -// TODO: REMOVE AFTER BOOTSTRAP - /** * A discriminated union that encapsulates successful outcome with a value of type [T] * or a failure with an arbitrary [Throwable] exception. + * @suppress **Deprecated**: Renamed to [Result]. */ -public inline class SuccessOrFailure @PublishedApi internal constructor( - @PublishedApi internal val value: Any? -) : Serializable { - // discovery - - /** - * Returns `true` if this instance represents successful outcome. - * In this case [isFailure] returns `false`. - */ - public val isSuccess: Boolean get() = value !is Failure - - /** - * Returns `true` if this instance represents failed outcome. - * In this case [isSuccess] returns `false`. - */ - public val isFailure: Boolean get() = value is Failure - - // value retrieval - - /** - * Returns the encapsulated value if this instance represents [success][isSuccess] or throws the encapsulated exception - * if it is [failure][isFailure]. - * - * This function is shorthand for `getOrElse { throw it }` (see [getOrElse]). - */ - public fun getOrThrow(): T = - when (value) { - is Failure -> throw value.exception - else -> value as T - } - - /** - * Returns the encapsulated value if this instance represents [success][isSuccess] or `null` - * if it is [failure][isFailure]. - * - * This function is shorthand for `getOrElse { null }` (see [getOrElse]). - */ - public fun getOrNull(): T? = - when (value) { - is Failure -> null - else -> value as T - } - - // exception retrieval - - /** - * Returns the encapsulated exception if this instance represents [failure][isFailure] or `null` - * if it is [success][isSuccess]. - * - * This function is shorthand for `fold(onSuccess = { null }, onFailure = { it })` (see [fold]). - */ - public fun exceptionOrNull(): Throwable? = - when (value) { - is Failure -> value.exception - else -> null - } - - // identity - - /** - * Returns `true` if the [other] object is `SuccessOrFailure` that encapsulates an equal value or exception. - */ - @Suppress("RESERVED_MEMBER_INSIDE_INLINE_CLASS") - public override fun equals(other: Any?): Boolean = other is SuccessOrFailure<*> && value == other.value - - /** - * Returns hashcode of either the encapsulated value or of the exception. - */ - @Suppress("RESERVED_MEMBER_INSIDE_INLINE_CLASS") - public override fun hashCode(): Int = value?.hashCode() ?: 0 - - /** - * Returns a string representation of the encapsulated value or `Failure(xxx)` string where - * `xxx` is a string representation of the exception. - */ - public override fun toString(): String = value.toString() - - // companion with constructors - - /** - * Companion object for [SuccessOrFailure] class that contains its constructor functions - * [success] and [failure]. - */ - public companion object { - /** - * Returns an instance that encapsulates the given [value] as successful value. - */ - @InlineOnly public inline fun success(value: T): SuccessOrFailure = - SuccessOrFailure(value) - - /** - * Returns an instance that encapsulates the given [exception] as failure. - */ - @InlineOnly public inline fun failure(exception: Throwable): SuccessOrFailure = - SuccessOrFailure(Failure(exception)) - } - - @PublishedApi - internal class Failure @PublishedApi internal constructor( - @JvmField - val exception: Throwable - ) : Serializable { - override fun equals(other: Any?): Boolean = other is Failure && exception == other.exception - override fun hashCode(): Int = exception.hashCode() - override fun toString(): String = "Failure($exception)" - } -} +@Deprecated( + message = "Renamed to Result", + level = DeprecationLevel.ERROR, + replaceWith = ReplaceWith("Result") +) +public typealias SuccessOrFailure = Result