37 lines
1.1 KiB
Kotlin
37 lines
1.1 KiB
Kotlin
package com.github.insanusmokrassar.TelegramBotAPI.utils
|
|
|
|
import kotlinx.serialization.*
|
|
import kotlinx.serialization.descriptors.*
|
|
import kotlinx.serialization.encoding.Decoder
|
|
import kotlinx.serialization.encoding.Encoder
|
|
|
|
@Serializable(MimeTypeSerializer::class)
|
|
expect class MimeType {
|
|
val raw: String
|
|
}
|
|
|
|
private val mimesCache = mutableMapOf<String, MimeType>()
|
|
|
|
fun String.asMimeType() = buildMimeType(this)
|
|
|
|
internal expect fun createMimeType(raw: String): MimeType
|
|
fun buildMimeType(raw: String): MimeType = mimesCache.getOrPut(raw) {
|
|
createMimeType(raw)
|
|
}
|
|
|
|
@Serializer(MimeType::class)
|
|
internal object MimeTypeSerializer : KSerializer<MimeType> {
|
|
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("mimeType", PrimitiveKind.STRING)
|
|
|
|
override fun deserialize(decoder: Decoder): MimeType {
|
|
val mimeType = decoder.decodeString()
|
|
return mimesCache.getOrPut(mimeType) {
|
|
createMimeType(mimeType)
|
|
}
|
|
}
|
|
|
|
override fun serialize(encoder: Encoder, value: MimeType) {
|
|
encoder.encodeString(value.raw)
|
|
}
|
|
}
|