Packages

An Elixir Slack client and bot.

Current section

Files

Jump to
slacks lib slack user.ex
Raw

lib/slack/user.ex

defmodule Slack.User do
@moduledoc ~S"""
A Slack user.
"""
@typedoc @moduledoc
@type t :: %__MODULE__{
id: String.t(),
name: String.t()
}
@enforce_keys [
:id,
:name
]
defstruct @enforce_keys
@doc ~S"""
Parse Slack user.
"""
@spec parse(map) :: {:ok, t} | {:error, :user_missing_id | :user_missing_name | :invalid_user}
def parse(data = %{}) do
id = MapX.get(data, :id)
name = MapX.get(data, :name)
cond do
is_nil(id) -> {:error, :user_missing_id}
is_nil(name) -> {:error, :user_missing_name}
:valid -> {:ok, %__MODULE__{id: id, name: name}}
end
end
def parse(_), do: {:error, :invalid_user}
end