Packages
appsignal
1.4.1
2.17.4
2.17.3
2.17.2
2.17.1
2.17.0
2.16.0
2.15.11
2.15.10
2.15.9
2.15.8
2.15.7
2.15.6
2.15.5
2.15.4
2.15.3
2.15.2
2.15.1
2.15.0
2.14.1
2.14.0
2.13.4
2.13.3
2.13.2
2.13.1
2.13.0
2.12.3
2.12.2
2.12.1
2.12.0
2.11.0
2.10.2
2.10.1
2.10.0
2.9.2
2.9.1
2.9.0
2.8.3
2.8.2
2.8.1
2.8.0
2.7.13
2.7.12
2.7.11
2.7.10
2.7.9
2.7.8
2.7.7
2.7.6
2.7.5
2.7.4
2.7.3
2.7.2
2.7.1
2.7.0
2.7.0-beta.1
2.6.1
2.6.0
2.5.3
2.5.2
2.5.1
2.5.0
2.4.3
2.4.2
2.4.1
2.4.0
2.3.1
2.3.0
2.2.19
2.2.18
2.2.17
2.2.16
2.2.15
2.2.14
2.2.13
2.2.12
retired
2.2.11
2.2.10
2.2.9
2.2.8
2.2.7
2.2.6
2.2.5
2.2.4
2.2.3
2.2.2
2.2.1
2.2.0
2.1.15
2.1.14
2.1.13
2.1.12
2.1.11
2.1.10
2.1.9
2.1.8
2.1.7
2.1.7-beta.1
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.8
2.0.7
2.0.6
2.0.6-beta.1
2.0.5
retired
2.0.4
retired
2.0.3
retired
2.0.2
retired
2.0.1
retired
2.0.0
retired
2.0.0-beta.11
2.0.0-beta.10
2.0.0-beta.9
2.0.0-beta.8
2.0.0-beta.7
2.0.0-beta.6
2.0.0-beta.5
2.0.0-beta.4
2.0.0-beta.3
2.0.0-beta.2
2.0.0-beta.1
2.0.0-alpha.7
2.0.0-alpha.6
2.0.0-alpha.5
2.0.0-alpha.4
2.0.0-alpha.3
2.0.0-alpha.2
2.0.0-alpha.1
1.13.5
1.13.4
1.13.3
1.13.2
1.13.1
1.13.0
1.13.0-beta.2
1.13.0-beta.1
1.12.1
1.12.0
1.12.0-beta.3
1.12.0-beta.2
1.12.0-beta.1
1.11.8
1.11.7
1.11.6
1.11.5
1.11.4
1.11.3
1.11.2
1.11.1
1.11.0
1.11.0-beta.1
1.10.13
1.10.12
1.10.11
1.10.10
1.10.9
1.10.8
1.10.7
1.10.6
1.10.5
1.10.4
1.10.3
1.10.2
1.10.1
1.10.0
1.9.4
1.9.3
1.9.2
1.9.1
1.9.1-beta.1
1.9.0
1.9.0-beta.1
1.9.0-alpha.1
1.8.2
1.8.1
1.8.1-beta.2
1.8.1-beta.1
1.8.0
1.7.2
1.7.1
1.7.0
1.7.0-beta.2
1.7.0-beta.1
1.7.0-alpha.4
1.7.0-alpha.3
1.7.0-alpha.2
1.7.0-alpha.1
1.6.7
1.6.6
1.6.6-beta.2
1.6.6-beta.1
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.6.0-beta.1
1.6.0-alpha.1
1.5.1
1.5.0
1.5.0-beta.2
1.5.0-beta.1
1.4.11-beta.1
1.4.10
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.4.0-alpha.1
1.3.6
1.3.6-beta.1
1.3.5
1.3.4
1.3.4-beta.1
1.3.3
1.3.2
1.3.1
1.3.0
1.3.0-beta.3
1.3.0-beta.2
1.3.0-beta.1
1.2.3
1.2.2
1.2.1
1.2.0
1.1.1
1.1.0
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-rc.1
0.13.0
0.12.3
0.12.2
0.12.1
0.12.0
0.11.6
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.2
0.9.1
0.9.0
0.8.0
0.7.1
0.7.0
0.6.2
0.6.1
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
Collects error and performance data from your Elixir applications and sends it to AppSignal
Current section
Files
Jump to
Current section
Files
lib/appsignal/utils/data_encoder.ex
defmodule Appsignal.Utils.DataEncoder do
@moduledoc """
Encodes data
"""
alias Appsignal.Nif
def encode(%{__struct__: _} = data) do
data |> Map.from_struct |> encode
end
def encode(data) when is_tuple(data) do
data |> Tuple.to_list |> encode
end
def encode(data) when is_map(data) do
{:ok, resource} = Nif.data_map_new
Enum.each(data, fn(item) -> encode(resource, item) end)
resource
end
def encode(data) when is_list(data) do
{:ok, resource} = Nif.data_list_new
Enum.each(data, fn(item) -> encode(resource, item) end)
resource
end
def encode(resource, {key, value}) when is_atom(key) do
encode(resource, {to_string(key), value})
end
def encode(resource, {key, value}) when not is_binary(key) do
encode(resource, {inspect(key), value})
end
def encode(resource, {key, value}) when is_binary(value) do
Nif.data_set_string(resource, key, value)
end
def encode(resource, {key, value}) when is_integer(value) and value >= 9223372036854775808 do
Nif.data_set_string(resource, key, "bigint:#{value}")
end
def encode(resource, {key, value}) when is_integer(value) do
Nif.data_set_integer(resource, key, value)
end
def encode(resource, {key, value}) when is_float(value) do
Nif.data_set_float(resource, key, value)
end
def encode(resource, {key, value}) when is_map(value) or is_list(value) or is_tuple(value) do
Nif.data_set_data(resource, key, encode(value))
end
def encode(resource, {key, true}) do
Nif.data_set_boolean(resource, key, 1)
end
def encode(resource, {key, false}) do
Nif.data_set_boolean(resource, key, 0)
end
def encode(resource, {key, nil}) do
Nif.data_set_nil(resource, key)
end
def encode(resource, {key, value}) when is_atom(value) do
encode(resource, {key, to_string(value)})
end
def encode(resource, {key, value}) do
encode(resource, {key, inspect(value)})
end
def encode(resource, value) when is_binary(value) do
Nif.data_set_string(resource, value)
end
def encode(resource, value) when is_integer(value) and value >= 9223372036854775808 do
Nif.data_set_string(resource, "bigint:#{value}")
end
def encode(resource, value) when is_integer(value) do
Nif.data_set_integer(resource, value)
end
def encode(resource, value) when is_float(value) do
Nif.data_set_float(resource, value)
end
def encode(resource, value) when is_map(value) or is_list(value) or is_tuple(value) do
Nif.data_set_data(resource, encode(value))
end
def encode(resource, true) do
Nif.data_set_boolean(resource, 1)
end
def encode(resource, false) do
Nif.data_set_boolean(resource, 0)
end
def encode(resource, nil) do
Nif.data_set_nil(resource)
end
def encode(resource, value) when is_atom(value) do
encode(resource, to_string(value))
end
def encode(resource, value) do
encode(resource, inspect(value))
end
end