Use a named status value for a domain-specific failure.

Custom Error Code

CustomErrorCode.kt
class LevelStatus(val ok: Boolean, val label: String)

fun levelName(level: Int): LevelStatus {
    if (level < 1) {
        return LevelStatus(false, "level:missing")
    }
    return LevelStatus(true, "level:$level")
}

fun main() {
    val level = 
    val status = levelName(level)
    val outcome = if (status.ok) {
        "ok"
    } else {
        "fail"
    }

    println("level=$level")
    println("outcome=$outcome")
    println("label=${status.label}")
}
class LevelStatus(val ok: Boolean, val label: String)

fun levelName(level: Int): LevelStatus {
    if (level < 1) {
        return LevelStatus(false, "level:missing")
    }
    return LevelStatus(true, "level:$level")
}

fun main() {
    val level = 
    val status = levelName(level)
    val outcome = if (status.ok) {
        "ok"
    } else {
        "fail"
    }

    println("level=$level")
    println("outcome=$outcome")
    println("label=${status.label}")
}
class LevelStatus(val ok: Boolean, val label: String)

fun levelName(level: Int): LevelStatus {
    if (level < 1) {
        return LevelStatus(false, "level:missing")
    }
    return LevelStatus(true, "level:$level")
}

fun main() {
    val level = 
    val status = levelName(level)
    val outcome = if (status.ok) {
        "ok"
    } else {
        "fail"
    }

    println("level=$level")
    println("outcome=$outcome")
    println("label=${status.label}")
}
custom-error A small status type can name an application failure without exposing low-level details.