lib/validators/type.ex

defmodule Veli.Validators.Type do
  @moduledoc """
  Type validator. Takes an atom that contains type information.
  
  ## Atoms
  - `:string`
  - `:integer`
  - `:float`
  - `:boolean`
  
  ## Example
  
      rule = [type: :integer]
      Veli.valid(2, rule) # valid
      Veli.valid(4.2, rule) # not valid
  """

  @spec valid?(any, atom) :: boolean
  def valid?(value, rule) when is_binary(value) do
    rule === :string
  end

  def valid?(value, rule) when is_integer(value) do
    rule === :integer
  end

  def valid?(value, rule) when is_float(value) do
    rule === :float
  end

  def valid?(value, rule) when is_boolean(value) do
    rule === :boolean
  end

  def valid?(_value, _rule) do
    false
  end
end