class ReeEnum::Values

def add(value, mapped_value, method)

def add(value, mapped_value, method)
  if @value_type.nil?
    @value_type = value.class
  elsif @value_type != value.class
    raise ArgumentError, "#{@klass}: value types should be the same for all enum values"
  end
  if !method.nil? && @collection.any? { _1.method == method }
    raise ArgumentError, "#{@klass}: method #{method.inspect} was already added"
  end
  if @collection_by_value.key?(value)
    raise ArgumentError, "#{@klass}: value #{value.inspect} was already added"
  end
  if @collection_by_mapped_value.key?(mapped_value)
    raise ArgumentError, "#{@klass}: mapped_value(#{mapped_value.inspect}) for #{value.inspect} was already added"
  end
  enum_value = ReeEnum::Value.new(
    @klass, @enum_name, value, mapped_value, method
  )
  @collection << enum_value
  @collection_by_value[value] = enum_value
  @collection_by_mapped_value[mapped_value] = enum_value
  enum_value
end