lib/smart_city/base_struct.ex
defmodule SmartCity.BaseStruct do
@moduledoc """
This module provides deserialization and atomization for structs
"""
alias SmartCity.Helpers
@spec new(String.t() | map()) :: map() | term()
def new(msg) when is_binary(msg) do
case Jason.decode(msg, keys: :atoms) do
{:ok, decoded} -> decoded
_ -> "Unable to json decode: #{msg}"
end
end
def new(msg) when is_map(msg) do
case Enum.any?(Map.keys(msg), &is_binary(&1)) do
true -> Helpers.to_atom_keys(msg)
_ -> msg
end
end
def new(msg) do
msg
end
end