defmodule Appsignal.Utils.ArgumentCleaner do alias Appsignal.Utils.Type def clean(argument) when is_boolean(argument) or is_integer(argument) or is_float(argument) or is_pid(argument) or is_port(argument) or is_reference(argument) do argument end def clean(argument) when is_map(argument) do {struct, map} = Map.pop(argument, :__struct__) "%#{Appsignal.Utils.module_name(struct)}{#{Enum.map_join(map, ", ", fn {key, value} -> "#{inspect(key)} => #{inspect(clean(value))}" end)}}" end def clean(argument), do: Type.from(argument) end