Created
November 13, 2016 05:03
-
-
Save tiagopog/ef30d32be38c3daa632e3f006d6c1f51 to your computer and use it in GitHub Desktop.
Elixir - Sample of struct + API
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule User do | |
defstruct name: nil, gender: nil, roles: [:normal] | |
defmodule NameError do | |
defexception message: "Name is too short" | |
end | |
def add_name(%User{} = user, name) when is_binary(name) do | |
try do | |
validate!(name: name) | |
%{user | name: name} | |
catch | |
kind, %User.NameError{message: message} -> | |
{kind, message} | |
end | |
end | |
def validate!(name: name) do | |
unless String.length(name) > 1, do: raise NameError | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment