steamwebapi/lib/SteamAPI.ex

38 lines
923 B
Elixir

defmodule SteamAPI do
@behaviour Tesla.Middleware
# steam API helper, based off baseurl and query
@impl Tesla.Middleware
def call(env, next, interface) do
env
|> apply_base(interface)
|> apply_base("https://api.steampowered.com")
|> merge(key: Application.fetch_env!(:steamwebapi, :token))
|> Tesla.run(next)
end
defp apply_base(env, base) do
if Regex.match?(~r/^https?:\/\//i, env.url) do
# skip if url is already with scheme
env
else
%{env | url: join(base, env.url)}
end
end
defp merge(env, query) do
Map.update!(env, :query, &(&1 ++ query))
end
defp join(base, url) do
case {String.last(to_string(base)), url} do
{nil, url} -> url
{"/", "/" <> rest} -> base <> rest
{"/", rest} -> base <> rest
{_, ""} -> base
{_, "/" <> rest} -> base <> "/" <> rest
{_, rest} -> base <> "/" <> rest
end
end
end