package dev.inmo.micro_utils.mime_types val mimeTypesByExtensions: Map> by lazy { val extensionsMap = mutableMapOf>() knownMimeTypes.forEach { mimeType -> mimeType.extensions.forEach { extensionsMap.getOrPut(it) { mutableListOf() }.add(mimeType) } } extensionsMap.mapValues { it.value.toTypedArray() } } inline fun getMimeType( stringWithExtension: String, selector: (Array) -> MimeType? = { it.firstOrNull() } ) = mimeTypesByExtensions[stringWithExtension.takeLastWhile { it != '.' }] ?.takeIf { it.isNotEmpty() } ?.let(selector) inline fun getMimeTypeOrAny( stringWithExtension: String, selector: (Array) -> MimeType? = { it.firstOrNull() } ) = getMimeType(stringWithExtension, selector) ?: KnownMimeTypes.Any