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

org.http4k.traffic.Sink.kt Maven / Gradle / Ivy

There is a newer version: 5.31.0.0
Show newest version
package org.http4k.traffic

import org.http4k.core.HttpMessage
import org.http4k.core.Request
import org.http4k.core.Response
import java.io.File
import java.util.UUID

/**
 * Consumes HTTP traffic for storage.
 */
fun interface Sink {
    operator fun set(request: Request, response: Response)

    companion object {
        /**
         * Serialises HTTP traffic to the FS, optimised for retrieval.
         */
        fun DiskTree(baseDir: String = ".", shouldStore: (HttpMessage) -> Boolean = { true }) = Sink { request, response ->
            val requestFolder = request.toFolder(baseDir.toBaseFolder())
            if (shouldStore(request)) request.writeTo(requestFolder)
            if (shouldStore(response)) response.writeTo(requestFolder)
        }

        /**
         * Serialises HTTP traffic in Memory, optimised for retrieval.
         */
        fun MemoryMap(
            cache: MutableMap,
            shouldStore: (HttpMessage) -> Boolean = { true }
        ) = Sink { request, response -> if (shouldStore(request) || shouldStore(response)) cache += request to response }

        /**
         * Serialises HTTP traffic to the FS in order.
         */
        fun DiskStream(
            baseDir: String = ".",
            shouldStore: (HttpMessage) -> Boolean = { true },
            id: () -> String = { System.nanoTime().toString() + UUID.randomUUID().toString() }
        ) = Sink { request, response ->
            val folder = File(baseDir, id())
            if (shouldStore(request)) request.writeTo(folder)
            if (shouldStore(response)) response.writeTo(folder)
        }

        /**
         * Serialises HTTP traffic to Memory in order.
         */
        fun MemoryStream(
            stream: MutableList>,
            shouldStore: (HttpMessage) -> Boolean = { true }
        ) = Sink { request, response -> if (shouldStore(request) || shouldStore(response)) stream += request to response }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy