class Protobuf::Message

def self.define_field(rule, type, fname, tag, options)

Define a field. Don't use this method directly.
def self.define_field(rule, type, fname, tag, options)
  field_array = options[:extension] ? extension_fields : fields
  field_name_hash = options[:extension] ? extension_field_name_to_tag : field_name_to_tag
  if field_array[tag]
    raise TagCollisionError, %!{Field number #{tag} has already been used in "#{self.name}" by field "#{fname}".!
  end
  field_definition = ::Protobuf::Field.build(self, rule, type, fname, tag, options)
  field_name_hash[fname] = tag
  field_array[tag] = field_definition
end