Jess Brent
04/08/2020, 2:35 PMinline fun <reified T> withResult(
    method: Result<T>,
    onFailure: (errors: List<Throwable>) -> Unit
): T {
        @Suppress("IMPLICIT_CAST_TO_ANY")
        val methodResult = when (method) {
            is Result.Success -> { method.t }
            is Result.Failure -> { onFailure.invoke(method.errors) }
        }
        return methodResult as T
}val r = withResult(method) { return Result.Failure(it) }ClassCastExceptiononFailuremethodResultResultkotlin.Resultturansky
04/08/2020, 2:42 PMJess Brent
04/08/2020, 2:44 PMJess Brent
04/08/2020, 2:54 PMinline fun <reified T> withResult(method: Result<T>): Pair<T?, List<Throwable>> {
    var result: T? = null
    var errors: List<Throwable> = mutableListOf()
    when (method) {
        is Result.Success -> { result = method.t }
        is Result.Failure -> { errors = method.errors }
    }
    return Pair(result, errors)
}Rob Murdock
04/08/2020, 2:55 PMJess Brent
04/08/2020, 2:55 PManton.bannykh
04/08/2020, 2:56 PMinvokeis Result.Failure -> { onFailure(method.errors) }Jess Brent
04/08/2020, 2:57 PMJess Brent
04/08/2020, 2:58 PMRob Murdock
04/08/2020, 2:59 PMRob Murdock
04/08/2020, 2:59 PMRobert Jaros
04/08/2020, 3:00 PMonFailureUnitRob Murdock
04/08/2020, 3:00 PManton.bannykh
04/08/2020, 3:03 PMinvokeRob Murdock
04/08/2020, 3:03 PMRobert Jaros
04/08/2020, 3:04 PMType inference failed. Expected type mismatch: inferred type is Result.Failure<...> but Unit was expectedJess Brent
04/08/2020, 3:04 PMRob Murdock
04/08/2020, 3:04 PMJess Brent
04/08/2020, 3:04 PMResult.FailureJess Brent
04/08/2020, 3:05 PM@Test
    fun success() {
        when(val result = testSuccess()) {
            is Result.Success -> { assertEquals("success", result.t) }
            is Result.Failure -> { asserter.fail("reeeeee") }
        }
    }
    @Test
    fun test_result_failure() {
        when(val result = testFail()) {
            is Result.Success -> { asserter.fail("reeee") }
            is Result.Failure -> { assertEquals("fail", result.errors.first().message) }
        }
    }
    private fun testFail(): Result<String> {
        val s = withResult(test("failme")) { return Result.Failure(it) }
        return Result.Success(s)
    }
    private fun testSuccess(): Result<String> {
        val s = withResult(test("success")) { return Result.Failure(it) }
        return Result.Success(s)
    }
    private fun test(string: String): Result<String> {
        if (string == "failme") {
            return Result.Failure(Error("fail"))
        }
        return Result.Success(string)
    }Rob Murdock
04/08/2020, 3:05 PMJess Brent
04/08/2020, 3:09 PMvar Result$Success = _.com.shift4.virgil.Result.Success;
    var Result$Failure = _.com.shift4.virgil.Result.Failure;
    var throwCCE = Kotlin.throwCCE;
    return function (T_0, isT, method, onFailure) {
      var tmp$, tmp$_0;
      var result = method;
      if (Kotlin.isType(result, Result$Success))
        tmp$ = result.t;
      else if (Kotlin.isType(result, Result$Failure))
        tmp$ = onFailure(result.errors);
      else
        tmp$ = Kotlin.noWhenBranchMatched();
      var methodResult = tmp$;
      return isT(tmp$_0 = methodResult) ? tmp$_0 : throwCCE();Result.FailureTRob Murdock
04/08/2020, 3:10 PMRob Murdock
04/08/2020, 3:11 PMRobert Jaros
04/08/2020, 3:12 PMval r = withResult<Any>(method) { return@withResult Result.Failure(it) }Jess Brent
04/08/2020, 3:12 PMRobert Jaros
04/08/2020, 3:13 PMRob Murdock
04/08/2020, 3:14 PMJess Brent
04/08/2020, 3:15 PMAnyJess Brent
04/08/2020, 3:15 PM@withResultRob Murdock
04/08/2020, 3:16 PMJess Brent
04/08/2020, 3:17 PMRobert Jaros
04/08/2020, 3:19 PMRobert Jaros
04/08/2020, 3:20 PMfailureRobert Jaros
04/08/2020, 3:20 PMsuccessJess Brent
04/08/2020, 3:20 PMStringRob Murdock
04/08/2020, 3:23 PMRob Murdock
04/08/2020, 3:28 PManton.bannykh
04/08/2020, 3:30 PMinvokeinvokeJess Brent
04/08/2020, 3:31 PMJess Brent
04/08/2020, 3:32 PMRobert Jaros
04/08/2020, 3:36 PManton.bannykh
04/08/2020, 3:36 PMRob Murdock
04/08/2020, 3:37 PMJess Brent
04/08/2020, 3:56 PManton.bannykh
04/08/2020, 3:56 PMJess Brent
04/08/2020, 3:57 PMJess Brent
04/08/2020, 4:05 PMJess Brent
04/08/2020, 4:05 PMJess Brent
04/08/2020, 4:07 PManton.bannykh
04/08/2020, 4:07 PMJess Brent
04/08/2020, 4:08 PManton.bannykh
04/08/2020, 4:08 PMJess Brent
04/08/2020, 4:33 PMJess Brent
04/08/2020, 4:42 PMreifiedJess Brent
04/08/2020, 4:42 PMJess Brent
04/08/2020, 4:43 PM