defmodule Stellar.Horizon.RequestParams do
@moduledoc """
Returns a Keyword list of formatted params
"""
@type args :: Keyword.t()
@type type :: atom()
@spec build_assets_params(args :: args(), type :: type()) :: Keyword.t()
def build_assets_params(args, type)
when type in ~w(selling_asset buying_asset destination_asset source_asset base_asset counter_asset)a do
args
|> Keyword.get(type)
|> resolve_asset_params(type)
end
def build_assets_params(_args, _type), do: []
@spec resolve_asset_params(args :: args(), type :: type()) :: Keyword.t()
defp resolve_asset_params([code: code, issuer: issuer], type) do
[
"#{type}_type": resolve_asset_type(code),
"#{type}_code": code,
"#{type}_issuer": issuer
]
end
defp resolve_asset_params(:native, type), do: ["#{type}_type": :native]
defp resolve_asset_params(_args, _type), do: []
@spec resolve_asset_type(code :: String.t()) :: atom()
defp resolve_asset_type(code) when byte_size(code) < 5, do: :credit_alphanum4
defp resolve_asset_type(_code), do: :credit_alphanum12
end