defmodule Fields.Name do
@moduledoc """
An Ecto Type for names that need to be stored securely.
## Example
```
schema "user" do
field :name, Fields.Name
field :email, Fields.EmailEncrypted
timestamps()
end
```
"""
alias Fields.{Validate, Encrypted}
use Ecto.Type
def type, do: :binary
def cast(value) do
value = value |> to_string() |> String.trim()
case Validate.name(value) do
true -> {:ok, value}
false -> :error
end
end
def dump(value) do
Encrypted.dump(value)
end
def load(value) do
Encrypted.load(value)
end
def embed_as(_), do: :self
def equal?(term1, term2), do: term1 == term2
end