code: def _do_parse(inp, fmt, encoding, force_types):
      res = {}
      _check_lib_installed(fmt, 'parse')
      if fmt == 'ini':
          cfg = configobj.ConfigObj(inp, encoding=encoding)
          res = cfg.dict()
      elif fmt == 'json':
          if six.PY3:
              inp = io.TextIOWrapper(inp, encoding=encoding)
          res = json.load(inp, encoding=encoding)
      elif fmt == 'json5':
          if six.PY3:
              inp = io.TextIOWrapper(inp, encoding=encoding)
          res = json5.load(inp, encoding=encoding)
      elif fmt == 'toml':
          if not _is_utf8(encoding):
              raise AnyMarkupError('toml is always utf-8 encoded according to specification')
          if six.PY3:
              inp = io.TextIOWrapper(inp, encoding=encoding)
          res = toml.load(inp)
      elif fmt == 'xml':
          res = xmltodict.parse(inp, encoding=encoding)
      elif fmt == 'yaml':
          res = yaml.safe_load(inp)
      else:
          raise
      return _ensure_proper_types(res, encoding, force_types)