def getMediaType()

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)
            }
        }
    }
  }