lib/kvasir/type/atom.ex

defmodule Kvasir.Type.Atom do
  @moduledoc ~S"""

  """
  use Kvasir.Type

  @impl Kvasir.Type
  def parse(atom, opts \\ [])
  def parse(atom, _opts) when is_atom(atom), do: {:ok, atom}

  def parse(atom, opts) when is_binary(atom) do
    if opts[:strict] do
      {:ok, String.to_existing_atom(atom)}
    else
      {:ok, String.to_atom(atom)}
    end
  rescue
    _ -> {:error, :unknown_atom}
  end

  def parse(_value, _opts), do: {:error, :invalid_atom}

  @impl Kvasir.Type
  def dump(atom, _opts \\ []), do: {:ok, to_string(atom)}
end