class Protobuf::Field::BaseField

def define_array_setter

def define_array_setter
  field = self
  @message_class.class_eval do
    define_method(field.setter_method_name) do |val|
      field.warn_if_deprecated
      
      if val.is_a?(Array)
        val = val.dup
        val.compact!
      else
        error_text = <<-TYPE_ERROR
          Expected value of type '#{field.type}'
          Got '#{val.class}' for protobuf field #{field.name}
        TYPE_ERROR
        raise TypeError, error_text
      end
      if val.nil? || (val.respond_to?(:empty?) && val.empty?)
        @values.delete(field.name)
      else
        @values[field.name] ||= ::Protobuf::Field::FieldArray.new(field)
        @values[field.name].replace(val)
      end
    end
  end
end