package com.example.modifier.http import com.example.modifier.Global import com.example.modifier.http.response.ErrorResponse import io.ktor.client.HttpClient import io.ktor.client.call.body import io.ktor.client.engine.okhttp.OkHttp import io.ktor.client.plugins.ClientRequestException import io.ktor.client.plugins.HttpResponseValidator import io.ktor.client.plugins.contentnegotiation.ContentNegotiation import io.ktor.client.plugins.defaultRequest import io.ktor.client.plugins.resources.Resources import io.ktor.serialization.kotlinx.json.json import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.json.Json @OptIn(ExperimentalSerializationApi::class) val KtorClient = HttpClient(OkHttp) { defaultRequest { Global.load() url(Global.serverUrl.endsWith("/").let { if (it) Global.serverUrl else "${Global.serverUrl}/" }) } install(Resources) install(ContentNegotiation) { json(Json { prettyPrint = true isLenient = true ignoreUnknownKeys = true explicitNulls = false }) } HttpResponseValidator { handleResponseExceptionWithRequest { exception, request -> val clientException = exception as? ClientRequestException ?: return@handleResponseExceptionWithRequest val exceptionResponse = clientException.response val err = exceptionResponse.body() throw Exception(err.message ?: "Unknown error") } } }