defprotocol Tab.Collapsible do
@moduledoc """
A protocol that collapses nested structures into flat ones
"""
@fallback_to_any true
def collapse(item, prefix)
end
defimpl Tab.Collapsible, for: [Integer, Float, BitString] do
def collapse(val, prefix) do
[{prefix, val}]
end
end
defimpl Tab.Collapsible, for: Any do
def collapse(val, prefix) do
[{prefix, to_string(val)}]
end
end
defimpl Tab.Collapsible, for: Map do
def collapse(map, prefix) do
Enum.map(map, fn {k, v} ->
Tab.Collapsible.collapse(v, [k | prefix])
end)
end
end