Kotlin coroutines error handling strategy — `runCatching` and `Result` class