From c77be7ec8fbbbd2b871efa3822be3b25edeb445d Mon Sep 17 00:00:00 2001 From: href Date: Sat, 9 Jan 2021 14:38:05 +0100 Subject: Old WIP commit - STS, ... --- lib/irc/parser/capabs.ex | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 lib/irc/parser/capabs.ex (limited to 'lib/irc/parser/capabs.ex') diff --git a/lib/irc/parser/capabs.ex b/lib/irc/parser/capabs.ex new file mode 100644 index 0000000..88bf017 --- /dev/null +++ b/lib/irc/parser/capabs.ex @@ -0,0 +1,32 @@ +defmodule Irc.Parser.Capabs do + @moduledoc "Helper to parse capability lists" + + @spec parse(String.t) :: %{capab :: String.t => true | args :: Map.t} + def parse(string) do + string + |> String.split(" ") + |> Enum.map(&parse_capab/1) + |> Enum.into(Map.new) + end + + defp parse_capab(string) do + case String.split(string, "=", parts: 2) do + [capab] -> + {capab, true} + [capab, args] -> + parse_capab_with_args(capab, args) + end + end + + defp parse_capab_with_args(capab, args) do + args = args + |> String.split(",") + |> Map.reduce(%{}, fn(k_v, acc) -> + [k, v] = String.split(k_v, "=") + Map.put(acc, k, v) + end) + {capab, args} + end + +end + -- cgit v1.2.3