HttpStatus.kt
package com.hexagonkt.http.model
import com.hexagonkt.core.assertEnabled
import com.hexagonkt.http.model.HttpStatusType.*
import kotlin.IllegalArgumentException
data class HttpStatus(
val code: Int,
val type: HttpStatusType = when (code) {
in 100..199 -> INFORMATION
in 200..299 -> SUCCESS
in 300..399 -> REDIRECTION
in 400..499 -> CLIENT_ERROR
in 500..599 -> SERVER_ERROR
else -> throw IllegalArgumentException(INVALID_CODE_ERROR_MESSAGE + code)
}
) {
companion object {
internal const val INVALID_CODE_ERROR_MESSAGE: String =
"Error code is not in any HTTP status range (100..599): "
val codes: Map<Int, HttpStatus> by lazy {
HTTP_STATUSES.associateBy { it.code }
}
operator fun get(code: Int): HttpStatus? =
codes[code]
}
init {
if (assertEnabled)
require(code in 100..599) { INVALID_CODE_ERROR_MESSAGE + code }
}
}