defmodule User do
@enforce_keys [:email]
defstruct [:email, name: "anonymous", admin?: false]
# A constructor is the idiomatic place to validate.
def new(fields) do
user = struct!(__MODULE__, fields)
if String.contains?(user.email, "@"),
do: {:ok, user},
else: {:error, :invalid_email}
end
end