lib/draft/type/boolean.ex

defmodule Draft.Type.Boolean do

    @truth [true, 1, "1", "true"]

    @falsly [false, 0, "0", "false"]

    @behaviour Draft.Type.Behaviour
    
    @impl Draft.Type.Behaviour
    def cast(nil, _opts) do
        {:ok, nil}
    end

    @impl Draft.Type.Behaviour
    def cast(value, _opts) when value in @truth do
        {:ok, true}
    end

    @impl Draft.Type.Behaviour
    def cast(value, _opts) when value in @falsly do
        {:ok, false}
    end

    @impl Draft.Type.Behaviour
    def cast(_value, _opts) do
        {:error, ["invalid boolean"]}
    end

    @impl Draft.Type.Behaviour
    def dump(value, _opts \\ []) do
        {:ok, value}
    end

end