# File lib/rubytorrent/typedstruct.rb, line 104
  def parse(dict)
    @required.each do |f, reqd|
      flabel = @label[f]
      raise TypedStructError, "missing required parameter #{flabel} (dict has #{dict.keys.join(', ')})" if reqd && !(dict.member? flabel)

      if dict.member? flabel
        v = dict[flabel]
        if @coerce.member? f
          v = @coerce[f][v]
        end
        if @array[f]
          raise TypeError, "for #{flabel}, expecting Array, got #{v.class} instead" unless v.kind_of? ::Array
        end
        self.send("#{f}=", v)
      end
    end

    ## disabled the following line as applications seem to put tons of
    ## weird fields in their .torrent files.
    # dict.each { |k, v| raise TypedStructError, %{unknown field "#{k}"} unless @field.member?(k.to_sym) || @label.values.member?(k) }
  end