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

commonMain.com.algolia.search.configuration.internal.extension.ClientCompression.kt Maven / Gradle / Ivy

package com.algolia.search.configuration.internal.extension

import com.algolia.search.configuration.Compression
import io.ktor.client.HttpClient
import io.ktor.client.plugins.HttpClientPlugin
import io.ktor.client.request.HttpRequestPipeline
import io.ktor.http.HttpHeaders
import io.ktor.http.HttpMethod
import io.ktor.util.AttributeKey

/**
 * Adds content encoding header to http requests
 */
internal class ClientCompression(config: Configuration) {

    val compression = config.compression

    class Configuration(var compression: Compression = Compression.None)

    companion object Plugin : HttpClientPlugin {

        override val key: AttributeKey = AttributeKey("ClientCompression")

        override fun prepare(block: Configuration.() -> Unit): ClientCompression =
            ClientCompression(Configuration().apply(block))

        override fun install(plugin: ClientCompression, scope: HttpClient) {
            scope.requestPipeline.intercept(HttpRequestPipeline.Before) {
                val method = context.method
                if (method == HttpMethod.Post || method == HttpMethod.Put) {
                    when (plugin.compression) {
                        Compression.Gzip -> context.headers.append(HttpHeaders.ContentEncoding, "gzip")
                        Compression.None -> {
                            // empty.
                        }
                    }
                }
            }
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy