defmodule Rivet.Utils.Ecto.Atom do
@moduledoc """
Custom Type to support `:atom`
defmodule Post do
use Ecto.Schema
schema "posts" do
field :atom_field, Ecto.Atom
end
end
Contributor: Brandon Gillespie
"""
@behaviour Ecto.Type
@type t :: atom()
def type, do: :string
def embed_as(_), do: :self
def cast(value) when is_atom(value), do: {:ok, value}
def cast(value) when is_binary(value), do: {:ok, String.to_atom(value)}
def cast(_), do: :error
def load(value), do: Transmogrify.As.as_atom(value)
def dump(value) when is_atom(value), do: {:ok, Atom.to_string(value)}
def dump(_), do: :error
def equal?(a, b), do: a == b
end