Current section
Files
Jump to
Current section
Files
lib/email_ex.ex
defmodule EmailEx do
@moduledoc """
E-mail parser and validation.
"""
use Combine
alias EmailEx.RFC2822
@doc """
Parse an address string.
"""
@doc since: "0.1.0"
@spec parse(String.t) :: {:ok, [String.t]} | {:error, String.t | term}
def parse(str), do: parse(str, RFC2822)
@doc """
Parse an address string with a custom parser.
"""
@doc since: "0.2.1"
@spec parse(String.t, Module.t) :: {:ok, [String.t]} | {:error, String.t | term}
def parse(str, mod) do
case apply(mod, :parse, [str]) do
{:error, _} = error -> error
value -> {:ok, value}
end
end
@doc """
Parse an address, and if fail, throws an exception
"""
@doc since: "0.2.1"
@spec parse!(String.t) :: {:ok, [String.t]}
def parse!(str), do: parse!(str, RFC2822)
@doc """
Parse an address string with a custom parser.
"""
@doc since: "0.2.1"
@spec parse!(String.t, Module.t) :: {:ok, [String.t]}
def parse!(str, mod) do
case parse(str, mod) do
{:error, reason} -> raise EmailExError, message: reason
value -> value
end
end
@doc """
Check if an address is valid.
"""
@doc since: "0.1.0"
@spec valid?(String.t) :: true | false
def valid?(nil),
do: false
def valid?(""),
do: false
def valid?(email) do
case parse(email) do
{:error, _} -> false
_ -> true
end
end
end