defmodule Irc.Parser.Isupport do @moduledoc """ ISUPPORT list parser """ def parse(list, acc \\ %{}) do list = List.flatten(list) Enum.reduce(list, acc, fn(entry, acc) -> case String.split(entry, "=", parts: 2) do [entry] -> if String.contains?(entry, " ") do acc else Map.put(acc, entry, true) end [entry, value] -> Map.put(acc, entry, parse_value(value)) end end) end defp parse_value(value) do if String.contains?(value, ":") do Enum.reduce(String.split(value, ","), %{}, fn(key_and_value, acc) -> case String.split(key_and_value, ":", parts: 2) do [key] -> Map.put(acc, key, nil) [key, value] -> Map.put(acc, key, format_value(value)) end end) else format_value(value) end end def format_value(value) do case Integer.parse(value) do {i, ""} -> i _ -> value end end end