commonMain.io.ktor.client.plugins.cache.storage.UnlimitedCacheStorage.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ktor-client-core-jvm Show documentation
Show all versions of ktor-client-core-jvm Show documentation
Ktor is a framework for quickly creating web applications in Kotlin with minimal effort.
/*
* Copyright 2014-2021 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.
*/
package io.ktor.client.plugins.cache.storage
import io.ktor.client.plugins.cache.*
import io.ktor.http.*
import io.ktor.util.collections.*
@Suppress("DEPRECATION")
internal class UnlimitedCacheStorage : HttpCacheStorage() {
private val store = ConcurrentMap>()
override fun store(url: Url, value: HttpCacheEntry) {
val data = store.computeIfAbsent(url) { ConcurrentSet() }
if (!data.add(value)) {
data.remove(value)
data.add(value)
}
}
override fun find(url: Url, varyKeys: Map): HttpCacheEntry? {
val data = store.computeIfAbsent(url) { ConcurrentSet() }
return data.find { it.varyKeys == varyKeys }
}
override fun findByUrl(url: Url): Set = store[url] ?: emptySet()
}
internal class UnlimitedStorage : CacheStorage {
private val store = ConcurrentMap>()
override suspend fun store(url: Url, data: CachedResponseData) {
val cache = store.computeIfAbsent(url) { ConcurrentSet() }
if (!cache.add(data)) {
cache.remove(data)
cache.add(data)
}
}
override suspend fun find(url: Url, varyKeys: Map): CachedResponseData? {
val data = store.computeIfAbsent(url) { ConcurrentSet() }
return data.find { it.varyKeys == varyKeys }
}
override suspend fun findAll(url: Url): Set = store[url] ?: emptySet()
}