46 lines
980 B
Elixir
46 lines
980 B
Elixir
defmodule Core.Author do
|
|
@moduledoc """
|
|
Properties of the author, Sloane
|
|
|
|
Modeled after the [h-card] specification.
|
|
|
|
[h-card]: https://microformats.org/wiki/h-card
|
|
"""
|
|
use TypedStruct
|
|
|
|
@public_properties ~w[name nickname url]a
|
|
|
|
typedstruct do
|
|
field :name, String.t()
|
|
field :given_name, String.t()
|
|
field :additional_name, String.t()
|
|
field :family_name, String.t()
|
|
field :nickname, String.t()
|
|
field :email, String.t()
|
|
field :url, String.t()
|
|
end
|
|
|
|
def sloane do
|
|
%__MODULE__{
|
|
name: "Sloane Perrault",
|
|
given_name: "Sloane",
|
|
additional_name: "Loretta",
|
|
family_name: "Perrault",
|
|
nickname: "sloanely_but_surely",
|
|
email: "sloane@fastmail.com",
|
|
url: "https://sloanelybutsurely.com"
|
|
}
|
|
end
|
|
|
|
def full do
|
|
sloane()
|
|
end
|
|
|
|
def public do
|
|
author = full()
|
|
|
|
for key <- @public_properties, reduce: %__MODULE__{} do
|
|
acc -> Map.put(acc, key, Map.get(author, key))
|
|
end
|
|
end
|
|
end
|