Packages

Core functionalities for the StarkInfra and StarkBank Elixir SDKs

Current section

Files

Jump to
starkcore lib utils url.ex
Raw

lib/utils/url.ex

defmodule StarkCore.Utils.URL do
@moduledoc false
alias StarkCore.Utils.API, as: API
def get_url(service, environment, version, path, query) do
(~s'#{base_url(service, environment)}#{version}/#{path}')
|> add_query(query)
end
defp base_url(service, environment) do
services = [
infra: "starkinfra",
bank: "starkbank",
sign: "starksign"
]
case environment do
:production -> "https://api.#{services[service]}.com/"
:sandbox -> "https://sandbox.api.#{services[service]}.com/"
end
end
defp add_query(endpoint, query) when is_nil(query) do
endpoint
end
defp add_query(endpoint, query) do
list =
for {k, v} <- query |> API.cast_json_to_api_format(),
!is_nil(v),
do: {k |> query_key, v |> query_argument}
if length(list) > 0 do
"#{endpoint}?#{to_charlist(URI.encode_query(list))}"
else
endpoint
end
end
defp query_key(key) do
key
|> to_string()
end
defp query_argument(value) when is_list(value) or is_tuple(value) do
value
|> Enum.map(fn v -> to_string(elem(v,1)) end)
|> Enum.join(",")
end
defp query_argument(value) do
value
end
end