Packages

A type-safe CoinGecko API client for Gleam

Current section

Files

Jump to
coinglecko src coinglecko@simple.erl
Raw

src/coinglecko@simple.erl

-module(coinglecko@simple).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/coinglecko/simple.gleam").
-export([price_request/8, supported_vs_currencies_request/1, supported_vs_currencies/2, token_price_request/9, decode_supported_vs_currencies/1, price/9, token_price/10, decode_price/1]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(" Simple price data endpoints.\n").
-file("src/coinglecko/simple.gleam", 15).
?DOC(" Build a request for current coin prices.\n").
-spec price_request(
coinglecko@client:client(),
list(binary()),
list(binary()),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
gleam@option:option(binary())
) -> {ok, gleam@http@request:request(binary())} |
{error, coinglecko@error:coin_gecko_error()}.
price_request(
Client,
Ids,
Vs_currencies,
Include_market_cap,
Include_24hr_vol,
Include_24hr_change,
Include_last_updated_at,
Precision
) ->
Query = [{query_param, <<"ids"/utf8>>, gleam@string:join(Ids, <<","/utf8>>)},
{query_param,
<<"vs_currencies"/utf8>>,
gleam@string:join(Vs_currencies, <<","/utf8>>)} |
coinglecko@request:optional_params(
[{<<"include_market_cap"/utf8>>,
gleam@option:map(
Include_market_cap,
fun coinglecko@request:bool_to_string/1
)},
{<<"include_24hr_vol"/utf8>>,
gleam@option:map(
Include_24hr_vol,
fun coinglecko@request:bool_to_string/1
)},
{<<"include_24hr_change"/utf8>>,
gleam@option:map(
Include_24hr_change,
fun coinglecko@request:bool_to_string/1
)},
{<<"include_last_updated_at"/utf8>>,
gleam@option:map(
Include_last_updated_at,
fun coinglecko@request:bool_to_string/1
)},
{<<"precision"/utf8>>, Precision}]
)],
coinglecko@request:build_get_request(
Client,
<<"/simple/price"/utf8>>,
Query
).
-file("src/coinglecko/simple.gleam", 77).
?DOC(" Build a request for supported vs currencies.\n").
-spec supported_vs_currencies_request(coinglecko@client:client()) -> {ok,
gleam@http@request:request(binary())} |
{error, coinglecko@error:coin_gecko_error()}.
supported_vs_currencies_request(Client) ->
coinglecko@request:build_get_request(
Client,
<<"/simple/supported_vs_currencies"/utf8>>,
[]
).
-file("src/coinglecko/simple.gleam", 88).
?DOC(" Get all supported vs currencies.\n").
-spec supported_vs_currencies(
coinglecko@client:client(),
fun((gleam@http@request:request(binary())) -> {ok,
gleam@http@response:response(binary())} |
{error, binary()})
) -> {ok, list(binary())} | {error, coinglecko@error:coin_gecko_error()}.
supported_vs_currencies(Client, Sender) ->
gleam@result:'try'(
supported_vs_currencies_request(Client),
fun(Req) ->
coinglecko@request:send_and_decode(
Req,
gleam@dynamic@decode:list(
{decoder, fun gleam@dynamic@decode:decode_string/1}
),
Sender
)
end
).
-file("src/coinglecko/simple.gleam", 101).
?DOC(" Build a request for token price by contract address.\n").
-spec token_price_request(
coinglecko@client:client(),
binary(),
list(binary()),
list(binary()),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
gleam@option:option(binary())
) -> {ok, gleam@http@request:request(binary())} |
{error, coinglecko@error:coin_gecko_error()}.
token_price_request(
Client,
Platform_id,
Contract_addresses,
Vs_currencies,
Include_market_cap,
Include_24hr_vol,
Include_24hr_change,
Include_last_updated_at,
Precision
) ->
Query = [{query_param,
<<"contract_addresses"/utf8>>,
gleam@string:join(Contract_addresses, <<","/utf8>>)},
{query_param,
<<"vs_currencies"/utf8>>,
gleam@string:join(Vs_currencies, <<","/utf8>>)} |
coinglecko@request:optional_params(
[{<<"include_market_cap"/utf8>>,
gleam@option:map(
Include_market_cap,
fun coinglecko@request:bool_to_string/1
)},
{<<"include_24hr_vol"/utf8>>,
gleam@option:map(
Include_24hr_vol,
fun coinglecko@request:bool_to_string/1
)},
{<<"include_24hr_change"/utf8>>,
gleam@option:map(
Include_24hr_change,
fun coinglecko@request:bool_to_string/1
)},
{<<"include_last_updated_at"/utf8>>,
gleam@option:map(
Include_last_updated_at,
fun coinglecko@request:bool_to_string/1
)},
{<<"precision"/utf8>>, Precision}]
)],
coinglecko@request:build_get_request(
Client,
<<"/simple/token_price/"/utf8, Platform_id/binary>>,
Query
).
-file("src/coinglecko/simple.gleam", 180).
?DOC(" Decode a supported vs currencies response from a JSON string.\n").
-spec decode_supported_vs_currencies(binary()) -> {ok, list(binary())} |
{error, coinglecko@error:coin_gecko_error()}.
decode_supported_vs_currencies(Json_string) ->
_pipe = gleam@json:parse(
Json_string,
gleam@dynamic@decode:list(
{decoder, fun gleam@dynamic@decode:decode_string/1}
)
),
gleam@result:map_error(_pipe, fun(Field@0) -> {decode_error, Field@0} end).
-file("src/coinglecko/simple.gleam", 187).
-spec price_decoder() -> gleam@dynamic@decode:decoder(gleam@dict:dict(binary(), gleam@dict:dict(binary(), float()))).
price_decoder() ->
gleam@dynamic@decode:dict(
{decoder, fun gleam@dynamic@decode:decode_string/1},
gleam@dynamic@decode:dict(
{decoder, fun gleam@dynamic@decode:decode_string/1},
coinglecko@request:flexible_float()
)
).
-file("src/coinglecko/simple.gleam", 52).
?DOC(" Get the current price of coins in specified currencies.\n").
-spec price(
coinglecko@client:client(),
list(binary()),
list(binary()),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
gleam@option:option(binary()),
fun((gleam@http@request:request(binary())) -> {ok,
gleam@http@response:response(binary())} |
{error, binary()})
) -> {ok, gleam@dict:dict(binary(), gleam@dict:dict(binary(), float()))} |
{error, coinglecko@error:coin_gecko_error()}.
price(
Client,
Ids,
Vs_currencies,
Include_market_cap,
Include_24hr_vol,
Include_24hr_change,
Include_last_updated_at,
Precision,
Sender
) ->
gleam@result:'try'(
price_request(
Client,
Ids,
Vs_currencies,
Include_market_cap,
Include_24hr_vol,
Include_24hr_change,
Include_last_updated_at,
Precision
),
fun(Req) ->
coinglecko@request:send_and_decode(Req, price_decoder(), Sender)
end
).
-file("src/coinglecko/simple.gleam", 143).
?DOC(" Get token price by contract address on a specific platform.\n").
-spec token_price(
coinglecko@client:client(),
binary(),
list(binary()),
list(binary()),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
gleam@option:option(binary()),
fun((gleam@http@request:request(binary())) -> {ok,
gleam@http@response:response(binary())} |
{error, binary()})
) -> {ok, gleam@dict:dict(binary(), gleam@dict:dict(binary(), float()))} |
{error, coinglecko@error:coin_gecko_error()}.
token_price(
Client,
Platform_id,
Contract_addresses,
Vs_currencies,
Include_market_cap,
Include_24hr_vol,
Include_24hr_change,
Include_last_updated_at,
Precision,
Sender
) ->
gleam@result:'try'(
token_price_request(
Client,
Platform_id,
Contract_addresses,
Vs_currencies,
Include_market_cap,
Include_24hr_vol,
Include_24hr_change,
Include_last_updated_at,
Precision
),
fun(Req) ->
coinglecko@request:send_and_decode(Req, price_decoder(), Sender)
end
).
-file("src/coinglecko/simple.gleam", 172).
?DOC(" Decode a price response from a JSON string.\n").
-spec decode_price(binary()) -> {ok,
gleam@dict:dict(binary(), gleam@dict:dict(binary(), float()))} |
{error, coinglecko@error:coin_gecko_error()}.
decode_price(Json_string) ->
_pipe = gleam@json:parse(Json_string, price_decoder()),
gleam@result:map_error(_pipe, fun(Field@0) -> {decode_error, Field@0} end).