in http-core/src/main/scala/org/apache/pekko/http/impl/model/parser/CommonActions.scala [31:66]
def getMediaType(mainType: String, subType: String, charsetDefined: Boolean,
params: Map[String, String]): MediaType = {
import MediaTypes._
val subLower = subType.toRootLowerCase
mainType.toRootLowerCase match {
case "multipart" => subLower match {
case "mixed" => multipart.mixed(params)
case "alternative" => multipart.alternative(params)
case "related" => multipart.related(params)
case "form-data" => multipart.`form-data`(params)
case "signed" => multipart.signed(params)
case "encrypted" => multipart.encrypted(params)
case custom => MediaType.customMultipart(custom, params)
}
case mainLower =>
// Faster version of MediaType.withParams for the common case of empty params
def withParams(mt: MediaType): MediaType = if (params.isEmpty) mt else mt.withParams(params)
// Try user-defined function to get a MediaType
customMediaTypes(mainLower, subLower) match {
case Some(customMediaType) => withParams(customMediaType)
case None =>
// User-defined function didn't get a MediaType, check for a predefined value
MediaTypes.getForKey((mainLower, subLower)) match {
case Some(registered) => withParams(registered)
case None =>
// No predefined value, create custom MediaType
if (charsetDefined)
MediaType.customWithOpenCharset(mainLower, subLower, params = params, allowArbitrarySubtypes = true)
else
MediaType.customBinary(mainLower, subLower, MediaType.Compressible, params = params,
allowArbitrarySubtypes = true)
}
}
}
}