Skip to content

Multiplatform Ktor schema declarationopensavvy.spine.apiFailureCompanion

FailureCompanion

abstract class FailureCompanion<F>(val statusCode: HttpStatusCode) : FailureSpec.ByCode<F> 

Helper to bind a statusCode to a given error class.

For an introduction to failures, see FailureSpec.

Example

@Serializable
data class UserNotFound(
    val id: String,
) {

   companion object : FailureCompanion<UserNotFound>(HttpStatusCode.NotFound)
}

// …An endpoint in a resources…
val getMe by get("me")
    .result<UserDto>()
    .failure(UserNotFound)

FailureCompanion is a helper to implement FailureSpec.ByCode. Just like FailureSpec.ByCode, two failures in the same endpoint cannot share the same HTTP status code. Read FailureSpec to learn why.

To declare multiple failures with the same code on the same endpoint, use a sealed class or a sealed interface. For example:

@Serializable
sealed class CannotProcessUserModification {

    @Serializable
    @SerialName("InvalidUsername")
    data class InvalidUsername(val userId: String, val explain: String) : CannotProcessUserModification()

    @Serializable
    @SerialName("InvalidAge")
    data class InvalidAge(val userId: String, val explain: String) : CannotProcessUserModification()

    companion object : FailureCompanion<CannotProcessUserModification>(HttpStatusCode.UnprocessableEntity)
}

val edit by patch()
    .request<UserModification>()
    .failure(CannotProcessUserModification)

Constructors

FailureCompanion

constructor(statusCode: HttpStatusCode)

Properties

statusCode

open override val statusCode: HttpStatusCode