lib/kvasir/type/email.ex

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

  """
  use Kvasir.Type

  @impl Kvasir.Type
  def parse(value, opts \\ [])

  def parse(value, _opts) when is_binary(value) do
    if String.contains?(value, "@") do
      {:ok, value}
    else
      {:error, :invalid_email}
    end
  end

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

  @impl Kvasir.Type
  def obfuscate(value, _opts) do
    {name, domain} = value |> String.split("@") |> Enum.split(-1)
    name = Enum.join(name, "")
    {:ok, "#{String.first(name)}***#{String.last(name)}@#{domain}"}
  end
end