module HTTPX::Plugins::Multipart::MimeTypeDetector

def call(file, _)

def call(file, _)
  return nil if file.eof? # FileMagic returns "application/x-empty" for empty files
  mime = FileMagic.open(FileMagic::MAGIC_MIME_TYPE) do |filemagic|
    filemagic.buffer(file.read(MAGIC_NUMBER))
  end
  file.rewind
  mime
end

def call(file, filename)

def call(file, filename)
  return nil if file.eof? # marcel returns "application/octet-stream" for empty files
  Marcel::MimeType.for(file, name: filename)
end

def call(file, _)

def call(file, _)
  mime = MimeMagic.by_magic(file)
  mime.type if mime
end

def call(file, _)

def call(file, _)
  return if file.eof? # file command returns "application/x-empty" for empty files
  Open3.popen3(*%w[file --mime-type --brief -]) do |stdin, stdout, stderr, thread|
    begin
      ::IO.copy_stream(file, stdin.binmode)
    rescue Errno::EPIPE
    end
    file.rewind
    stdin.close
    status = thread.value
    # call to file command failed
    if status.nil? || !status.success?
      $stderr.print(stderr.read)
    else
      output = stdout.read.strip
      if output.include?("cannot open")
        $stderr.print(output)
      else
        output
      end
    end
  end
end

def call(_, _); end

def call(_, _); end