Rename SuccessOrFailure to Result and hide Failure from ABI

* The members of Result are isSuccess, isFailure, exceptionOrNull, getOrNull
* The rest of API is implemented via inline-only extensions
* There are two internal functions to hide detailed mechanics of an internal
  Result.Failure class: createFailure and throwOnFailure
* Result.toString is explicit: either Success(v) or Failure(x)

See KT-26538
This commit is contained in:
Roman Elizarov
2018-09-09 11:34:31 +03:00
parent 69ee88871f
commit e2713501ce
81 changed files with 968 additions and 612 deletions
+8 -8
View File
@@ -1,15 +1,15 @@
// !LANGUAGE: +InlineClasses
// IGNORE_BACKEND: JVM_IR
inline class SuccessOrFailure<out T>(val value: Any?) {
inline class Result<out T>(val value: Any?) {
val isFailure: Boolean get() = value is Failure
public companion object {
public inline fun <T> success(value: T): SuccessOrFailure<T> =
SuccessOrFailure(value)
public inline fun <T> success(value: T): Result<T> =
Result(value)
public inline fun <T> failure(exception: Throwable): SuccessOrFailure<T> =
SuccessOrFailure(Failure(exception))
public inline fun <T> failure(exception: Throwable): Result<T> =
Result(Failure(exception))
}
class Failure (
@@ -17,11 +17,11 @@ inline class SuccessOrFailure<out T>(val value: Any?) {
)
}
inline fun <R> runCatching(block: () -> R): SuccessOrFailure<R> {
inline fun <R> runCatching(block: () -> R): Result<R> {
return try {
SuccessOrFailure.success(block())
Result.success(block())
} catch (e: Throwable) {
SuccessOrFailure.failure(e)
Result.failure(e)
}
}