Packages
forge_sdk
0.33.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/google_protos.ex
defimpl ForgeSdk.Display, for: Google.Protobuf.Any do
@moduledoc """
Implementation of `Display` protocol for `Timestamp`
"""
alias ForgeSdk.Display
@spec display(nil | Google.Protobuf.Any.t(), any()) :: {any(), any()} | %{type: atom()}
def display(any, expand? \\ false) do
case ForgeAbi.decode_any(any) do
{:error, _} ->
case String.valid?(any.value) do
true -> Map.from_struct(any)
false -> Map.from_struct(%{any | value: Base.url_encode64(any.value, padding: false)})
end
{:ok, data} ->
type_url = any.type_url
case is_map(data) do
true ->
data
|> Display.display(expand?)
|> Map.put(:_type, get_type(type_url))
|> Map.put(:type_url, type_url)
|> Map.put(:encoded_value, Base.url_encode64(any.value, padding: false))
_ ->
%{
_type: get_type(type_url),
type_url: type_url,
data: Display.display(data, expand?),
value: Base.url_encode64(any.value, padding: false)
}
end
end
end
# TODO(tchen): we shall unify the name of tx (covert things like :confirm to :confirm_tx)
defp get_type(<<_::size(16)>> <> ":t:" <> type), do: "#{type}_tx"
defp get_type(type_url), do: type_url
end