class Protobuf::Field::EnumField

def acceptable?(val)

def acceptable?(val)
  case val
  when Symbol then
    raise TypeError unless @type.const_defined?(val)
  when EnumValue then
    raise TypeError if val.parent_class != @type
  else
    raise TypeError unless @type.valid_tag?(val)
  end
  true
end

def define_setter

def define_setter
  field = self
  @message_class.class_eval do
    define_method("#{field.name}=") do |value|
      orig_value = value
      if value.nil?
        @values.delete(field.name)
      else
        value = field.type.fetch(value)
        raise TypeError, "Invalid ENUM value: #{orig_value.inspect} for #{field.name}" unless value
        @values[field.name] = value
      end
    end
  end
end

def encode(value)

def encode(value)
  super(value.to_i)
end

def typed_default_value

def typed_default_value
  if @default.is_a?(Symbol)
    @type.const_get(@default)
  else
    self.class.default
  end
end