MediaType.kt
- package com.hexagonkt.core.media
- import com.hexagonkt.core.assertEnabled
- import com.hexagonkt.core.media.MediaTypeGroup.ANY
- /**
- * Media type (also known as MIME type).
- */
- data class MediaType(
- val group: MediaTypeGroup,
- val type: String,
- ) {
- val fullType: String = if (group == ANY) "*/$type" else "${group.text}/$type"
- init {
- if (assertEnabled)
- require(type.matches(MEDIA_TYPE_FORMAT)) {
- "Type must match '$MEDIA_TYPE_FORMAT': $type"
- }
- }
- companion object {
- val fullTypes: Map<String, MediaType> by lazy {
- MEDIA_TYPES_EXTENSIONS.values.toSet().associateBy { it.fullType }
- }
- operator fun get(extension: String): MediaType =
- MEDIA_TYPES_EXTENSIONS[extension] ?: DEFAULT_MEDIA_TYPE
- operator fun invoke(fullType: String): MediaType =
- fullTypes[fullType] ?: parseMediaType(fullType)
- }
- }