lib/kuddle/config/types/boolean.ex

defmodule Kuddle.Config.Types.Boolean do
  def cast(value) when is_boolean(value) do
    {:ok, value}
  end

  def cast(value) when is_binary(value) do
    value = String.upcase(value)

    cond do
      value in ["YES", "Y", "1", "T", "TRUE"] ->
        {:ok, true}

      value in ["NO", "N", "0", "F", "FALSE"] ->
        {:ok, false}

      true ->
        :error
    end
  end

  def cast(0) do
    {:ok, false}
  end

  def cast(n) when n > 0 do
    {:ok, true}
  end

  def cast(_) do
    :error
  end
end