lib/types/float.ex

defmodule DryValidation.Types.Float do
  @moduledoc """
  Represents a float type.
  Will try to cast strings into float values.
  ```
  DryValidation.schema do
    required :price, Types.Float
  end
  ```
  """

  @doc false
  def cast(value) when is_binary(value) do
    case Float.parse(value) do
      {number, ""} -> number
      _ -> value
    end
  end

  def cast(value), do: value

  @doc false
  def valid?(value) when is_float(value), do: true
  def valid?(_value), do: false
end