Packages
forge_sdk
0.32.0
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.7
1.0.6
1.0.4
1.0.4-p1
1.0.4-p0
1.0.3
1.0.2
1.0.2-p1
1.0.1
1.0.1-p1
1.0.0
0.40.6
0.40.5
0.40.4
0.40.3
0.40.2
0.40.1
0.40.0
0.39.1
0.39.0
0.38.6
0.38.5
0.38.4
0.38.3
0.38.2
0.38.1
0.38.0
0.37.5
0.37.4
0.37.3
0.37.2
0.37.1
0.37.0
0.34.0
0.33.2
0.33.1
0.33.0
0.32.2
0.32.1
0.32.0
0.31.1
0.31.0
0.30.0
0.29.1
0.29.0
0.28.3
0.28.2
0.28.1
0.28.0
0.27.4
0.27.3
0.27.2
0.27.1
0.27.0
0.26.6
0.26.5
0.26.4
0.26.3
0.26.1
0.26.0
Elixir / Erlang version of the SDK for Forge framework.
Current section
Files
Jump to
Current section
Files
lib/forge_sdk/protocol/display.ex
defprotocol ForgeSdk.Display do
@moduledoc """
Display protocol. This is to show the data structure in various places.
"""
@fallback_to_any true
@type t :: ForgeSdk.Display.t()
@doc """
Convert a data structure to
"""
@spec display(t(), boolean()) :: any()
def display(data, expand? \\ false)
end
defimpl ForgeSdk.Display, for: Atom do
@moduledoc """
Implementation of `Display` protocol for `Atom`.
"""
alias ForgeSdk.Display
def display(nil, _expand?), do: nil
def display(data, _expand?) do
case is_boolean(data) do
true -> data
_ -> Atom.to_string(data)
end
end
end
defimpl ForgeSdk.Display, for: BitString do
@moduledoc """
Implementation of `Display` protocol for `Any`.
"""
alias ForgeSdk.Display
# TODO: need to figure out why this didn't work
def display(data, _expand? \\ false) do
case String.valid?(data) do
true -> data
_ -> Base.url_encode64(data, padding: false)
end
end
end
defimpl ForgeSdk.Display, for: List do
@moduledoc """
Implementation of `Display` protocol for `Any`.
"""
alias ForgeSdk.Display
def display(data, expand? \\ false) do
Enum.map(data, &Display.display(&1, expand?))
end
end
defimpl ForgeSdk.Display, for: Any do
@moduledoc """
Implementation of `Display` protocol for `Any`.
"""
alias ForgeSdk.Display
def display(data, expand? \\ false)
def display(%{__struct__: _} = data, _expand?) do
basic = Map.from_struct(data)
Enum.reduce(basic, basic, fn {k, v}, acc ->
cond do
is_map(v) and Map.has_key?(v, :__struct__) -> Map.put(acc, k, Display.display(v))
is_tuple(v) -> Map.put(acc, k, Display.display(v))
is_list(v) -> Map.put(acc, k, Enum.map(v, &Display.display(&1)))
true -> Map.put(acc, k, Display.display(v))
end
end)
end
def display(data, _expand?) when is_binary(data) do
case String.valid?(data) do
true -> data
_ -> Base.url_encode64(data, padding: false)
end
end
def display(data, _expand?), do: data
end