Packages
timber
2.5.0
3.1.2
3.1.1
3.1.0
3.0.0
3.0.0-alpha.3
3.0.0-alpha.2
3.0.0-alpha.1
2.8.4
2.8.3
2.8.2
2.8.1
2.8.0
2.7.0
2.6.1
2.6.0
2.5.6
2.5.5
2.5.4
2.5.3
2.5.2
2.5.1
2.5.0
2.4.5
2.4.4
2.4.3
2.4.2
2.4.1
2.4.0
2.3.4
2.3.3
2.3.1
2.3.0
2.2.1
2.2.0
2.1.8
2.1.7
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.2
2.0.1
2.0.0
2.0.0-rc7
2.0.0-rc6
2.0.0-rc5
2.0.0-rc4
2.0.0-rc3
2.0.0-rc2
2.0.0-rc1
1.1.18
1.1.17
1.1.16
1.1.15
1.1.14
1.1.13
1.1.12
1.1.11
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.16
1.0.15
1.0.14
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
🌲 Great Elixir Logging Made Easy. Official Timber.io Integration.
Current section
Files
Jump to
Current section
Files
lib/timber/utils/map.ex
defmodule Timber.Utils.Map do
@moduledoc false
def deep_from_struct(%{__struct__: _mod} = struct) do
struct
|> Map.from_struct()
|> deep_from_struct()
end
def deep_from_struct(map) when is_map(map) do
map
|> Enum.reduce(%{}, fn
{k, %DateTime{} = v}, acc ->
Map.put(acc, k, DateTime.to_iso8601(v))
{k, v}, acc when is_map(v) ->
new_v = deep_from_struct(v)
Map.put(acc, k, new_v)
{k, v}, acc ->
Map.put(acc, k, v)
end)
end
@doc """
Recursively drops keys with blank values in a map.
"""
def recursively_drop_blanks(%{__struct__: _mod} = struct) do
struct
|> Map.from_struct()
|> recursively_drop_blanks()
end
def recursively_drop_blanks(map) when is_map(map) do
map
|> Enum.reduce(%{}, fn
{k, v}, acc when is_map(v) ->
new_v = recursively_drop_blanks(v)
if map_size(new_v) > 0 do
Map.put(acc, k, new_v)
else
acc
end
{_k, nil}, acc -> acc
{_k, ""}, acc -> acc
{_k, []}, acc -> acc
{k, v}, acc -> Map.put(acc, k, v)
end)
end
end