lib/types/date.ex

defmodule DryValidation.Types.Date do
  @moduledoc """
  Represents a boolean type.
  Will cast the strings "true" and "false" into real boolean values.
  ```
  DryValidation.schema do
    required :admin, Types.Bool
  end
  ```
  """
  @doc false
  def cast(%{__struct__: _date} = value), do: value
  def cast(value) do
    case Date.from_iso8601(value) do
      {:ok, date} -> date
      _ -> value
    end
  end

  @doc false
  def valid?(%{__struct__: _date}), do: true
  def valid?(_value), do: false
end