defmodule MyspaceIPFS.Utils do @moduledoc """ MyspaceIPFS.Utils is a collection of helper functions for the MyspaceIPFS library. """ @spec map_response_data(any) :: list def map_response_data(response) do extract_data_from_plain_response(response) |> convert_list_of_tuples_to_map() end # Private functions defp extract_data_from_plain_response(binary) do binary |> split_string_by_newline() |> filter_empties() |> Enum.map(fn x -> extract_tuples_from_string(x) end) end defp convert_list_of_tuples_to_map(list) do list |> Enum.map(fn x -> list_of_tuples_to_map(x) end) end defp filter_empties(list) do list |> Enum.filter(fn x -> x != nil end) |> Enum.filter(fn x -> x != {} end) |> Enum.filter(fn x -> x != [] end) |> Enum.filter(fn x -> x != "" end) end defp split_string_by_newline(string) do Regex.split(~r/\n/, string) end defp split_string_by_comma(string) do Regex.split(~r/,/, string) end defp extract_tuples_from_string(string) do string |> split_string_by_comma() |> filter_empties() |> Enum.map(fn x -> tuplestring_to_tuple(x) end) end defp get_value_from_string(string) do # IO.puts("ValueString: #{string}") with data = Regex.run(~r/:"(.+?)"/, string), true <- not is_nil(data) do Enum.at(data, 1) else _ -> "" end end defp get_name_from_string(string) do # IO.puts("NameString: #{string}") with data = Regex.run(~r/"(.+?)":/, string), true <- not is_nil(data) do Enum.at(data, 1) else _ -> "" end end defp tuplestring_to_tuple(string) do {get_name_from_string(string), get_value_from_string(string)} end def list_of_tuples_to_map(list) do list |> Enum.into(%{}) end end