Packages

Find the mail exchanger for a given hostname.

Current section

Files

Jump to
mx_tool lib response.ex
Raw

lib/response.ex

defmodule MxTool.Response do
@moduledoc false
alias MxTool.Response
defstruct [
:records,
:lowest_record
]
def new([]), do: {:invalid, :no_records}
def new(records) when is_list(records) do
{:ok, records |> to_response}
end
defp to_response(records) do
%Response{
records: records,
lowest_record: records |> take_lowest_record,
}
end
defp take_lowest_record([]), do: nil
defp take_lowest_record(records) do
records
|> sort_by_priority
|> List.first
|> record_to_domain
end
defp sort_by_priority([]), do: []
defp sort_by_priority(records) do
Enum.sort(records, fn({priority, _}, {other_priority, _}) ->
priority < other_priority
end)
end
defp record_to_domain(nil), do: nil
defp record_to_domain({_, domain}), do: domain
end