lib/email_hash.ex

defmodule Fields.EmailHash do
  @moduledoc """
  An Ecto Type for hashed emails.
  Use in conjuction with `Fields.EmailEncrypted` in order to be able to look up database rows by email.
  Hashed using sha256. See `Fields.Helpers` for hashing details.

  ## Example

      schema "users" do
        field(:email, Fields.EmailEncrypted)
        field(:email_hash, Fields.EmailHash)
      end
  """
  alias Fields.{EmailPlaintext, Hash}
  use Ecto.Type

  def type, do: :binary

  def cast(value), do: EmailPlaintext.cast(value)

  def dump(value), do: Hash.dump(value)

  def load(value) do
    {:ok, value}
  end

  def embed_as(_), do: :self

  def equal?(term1, term2), do: term1 == term2
end