pawel.barszcz
11/24/2016, 5:00 PMprivate fun <T> tryWithExceptionMapping(operation: () -> T,
vararg mappings: Pair<KClass<out Throwable>, () -> Throwable>): T {
return try {
operation.invoke()
} catch (throwableToMap: Throwable) {
val matchingMapping = mappings
.filter { it.first.java.isInstance(throwableToMap) }
.firstOrNull()
?: Pair(Throwable::class, { throw throwableToMap })
val mappedThrowable = matchingMapping.second.invoke()
throw mappedThrowable
}
}