diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/utility/highlevel_try_finally/safe_autoclose.kt b/src/commonMain/kotlin/ru/landgrafhomyak/utility/highlevel_try_finally/safe_autoclose.kt index 6d6ed32..0d14a03 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/utility/highlevel_try_finally/safe_autoclose.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/utility/highlevel_try_finally/safe_autoclose.kt @@ -1,9 +1,21 @@ package ru.landgrafhomyak.utility.highlevel_try_finally -fun safeAutoClose( +inline fun safeAutoClose( + finally: () -> Unit, + action: () -> R +): R = safeAutoClose(onError = finally, onSuccess = finally, onCrossReturn = finally, action = action) + +inline fun safeAutoClose( onError: () -> Unit = {}, onSuccess: () -> Unit = {}, action: () -> R +): R = safeAutoClose(onError = onError, onSuccess = onSuccess, onCrossReturn = onSuccess, action = action) + +inline fun safeAutoClose( + onError: () -> Unit = {}, + onSuccess: () -> Unit = {}, + onCrossReturn: () -> Unit = {}, + action: () -> R ): R { val ret: R var wasError = false @@ -22,7 +34,7 @@ fun safeAutoClose( } finally { if (!wasError) { if (crossReturned) - throw Error("crossreturn") + onCrossReturn() onSuccess() } }