more annotations to god of annotations

This commit is contained in:
2020-10-15 00:26:37 +06:00
parent f44174b5b3
commit f8a8808508
53 changed files with 227 additions and 10 deletions

View File

@@ -1,13 +1,17 @@
package dev.inmo.micro_utils.mime_types
import kotlinx.serialization.Serializable
import kotlin.js.JsExport
@JsExport
@Serializable(MimeTypeSerializer::class)
interface MimeType {
val raw: String
}
@JsExport
data class CustomMimeType(override val raw: String) : MimeType
@JsExport
@Serializable(MimeTypeSerializer::class)
sealed class KnownMimeTypes(override val raw: String) : MimeType {
object Any : MimeType, KnownMimeTypes("*/*")
@@ -2144,10 +2148,12 @@ internal val knownMimeTypes: Set<MimeType> = setOf(
KnownMimeTypes.XConference.XCooltalk,
)
@JsExport
val knownMimeTypesMap by lazy {
knownMimeTypes.associateBy { it.raw }
}
@JsExport
fun findBuiltinMimeType(from: String): MimeType? {
return knownMimeTypesMap[from]
}

View File

@@ -5,18 +5,22 @@ import kotlinx.serialization.Serializer
import kotlinx.serialization.descriptors.*
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlin.js.JsExport
private val mimesCache = mutableMapOf<String, MimeType>().also {
knownMimeTypes.forEach { mimeType -> it[mimeType.raw] = mimeType }
}
@JsExport
fun mimeType(raw: String) = mimesCache.getOrPut(raw) {
parseMimeType(raw)
}
@JsExport
internal fun parseMimeType(raw: String): MimeType = CustomMimeType(raw)
@Serializer(MimeType::class)
@JsExport
object MimeTypeSerializer : KSerializer<MimeType> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("mimeType", PrimitiveKind.STRING)