docs: def parse_multipart_headers(iterable):
      """Parses multipart headers from an iterable that yields lines (including
      the trailing newline symbol).  The iterable has to be newline terminated.
  
      The iterable will stop at the line where the headers ended so it can be
      further consumed.
  
      :param iterable: iterable of strings that are newline terminated
      """
      result = []
      for line in iterable:
          line = to_native(line)
          line, line_terminated = _line_parse(line)
          if not line_terminated:
              raise ValueError('unexpected end of line in multipart header')
          if not line:
              break
          elif line[0] in ' \t' and result:
              key, value = result[-1]
              result[-1] = (key, value + '\n ' + line[1:])
          else:
              parts = line.split(':', 1)
              if len(parts) == 2:
                  result.append((parts[0].strip(), parts[1].strip()))
  
      # we link the list to the headers, no need to create a copy, the
      # list was not shared anyways.
      return Headers(result)