Current section
Files
Jump to
Current section
Files
lib/slack/team.ex
defmodule Slack.Team do
@moduledoc ~S"""
A Slack team.
"""
@typedoc @moduledoc
@type t :: %__MODULE__{
id: String.t(),
name: String.t(),
domain: String.t()
}
@enforce_keys [
:id,
:name,
:domain
]
defstruct @enforce_keys
@doc ~S"""
Parse Slack team.
"""
@spec parse(map) ::
{:ok, t}
| {:error, :team_missing_id | :team_missing_name | :team_missing_domain | :invalid_team}
def parse(data = %{}) do
id = MapX.get(data, :id)
name = MapX.get(data, :name)
domain = MapX.get(data, :domain)
cond do
is_nil(id) -> {:error, :team_missing_id}
is_nil(name) -> {:error, :team_missing_name}
is_nil(domain) -> {:error, :team_missing_domain}
:valid -> {:ok, %__MODULE__{id: id, name: name, domain: domain}}
end
end
def parse(_), do: {:error, :invalid_team}
end