All Downloads are FREE. Search and download functionalities are using the official Maven repository.

iosMain.eu.codlab.http.NetworkClient.kt Maven / Gradle / Ivy

The newest version!
package eu.codlab.http

import io.ktor.client.HttpClient
import io.ktor.client.engine.darwin.Darwin
import io.ktor.client.plugins.HttpTimeout
import io.ktor.client.plugins.auth.Auth
import io.ktor.client.plugins.auth.AuthConfig
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
import io.ktor.client.plugins.logging.LogLevel
import io.ktor.client.plugins.logging.Logging
import io.ktor.client.plugins.websocket.WebSockets
import io.ktor.client.request.HttpRequestBuilder
import io.ktor.serialization.kotlinx.json.json
import kotlinx.serialization.json.Json

@Suppress("MagicNumber")
actual fun createClient(
    configuration: Configuration,
    onAuth: AuthConfig.() -> Unit,
    onRequest: ((request: HttpRequestBuilder) -> Unit)?
): HttpClient {
    return HttpClient(Darwin) {
        install(Auth) {
            onAuth()
        }

        if (configuration.enableLogs) {
            install(Logging) {
                level = LogLevel.ALL
            }
        }

        if (configuration.enableSocket) {
            install(WebSockets)
        }

        install(HttpTimeout) {
            connectTimeoutMillis = configuration.connectTimeoutMillis
            requestTimeoutMillis = configuration.requestTimeoutMillis
            socketTimeoutMillis = configuration.socketTimeoutMillis
        }

        if (null != onRequest) {
            install(InjectHeaderPlugin) {
                this.onRequest = onRequest
            }
        }

        install(ContentNegotiation) {
            json(
                Json {
                    encodeDefaults = true
                    ignoreUnknownKeys = true
                    prettyPrint = true
                }
            )
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy