Packages

A type-safe CoinGecko API client for Gleam

Current section

Files

Jump to
coinglecko src coinglecko@ping.erl
Raw

src/coinglecko@ping.erl

-module(coinglecko@ping).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/coinglecko/ping.gleam").
-export([check_request/1, decode_response/1, check/2]).
-export_type([ping_response/0]).
-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(" Check CoinGecko API server status.\n").
-type ping_response() :: {ping_response, binary()}.
-file("src/coinglecko/ping.gleam", 17).
?DOC(" Build a request to check the CoinGecko API server status.\n").
-spec check_request(coinglecko@client:client()) -> {ok,
gleam@http@request:request(binary())} |
{error, coinglecko@error:coin_gecko_error()}.
check_request(Client) ->
coinglecko@request:build_get_request(Client, <<"/ping"/utf8>>, []).
-file("src/coinglecko/ping.gleam", 38).
-spec ping_decoder() -> gleam@dynamic@decode:decoder(ping_response()).
ping_decoder() ->
gleam@dynamic@decode:field(
<<"gecko_says"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Gecko_says) ->
gleam@dynamic@decode:success({ping_response, Gecko_says})
end
).
-file("src/coinglecko/ping.gleam", 22).
?DOC(" Decode a ping response from a JSON string.\n").
-spec decode_response(binary()) -> {ok, ping_response()} |
{error, coinglecko@error:coin_gecko_error()}.
decode_response(Json_string) ->
_pipe = gleam@json:parse(Json_string, ping_decoder()),
gleam@result:map_error(_pipe, fun(Field@0) -> {decode_error, Field@0} end).
-file("src/coinglecko/ping.gleam", 30).
?DOC(" Check if the CoinGecko API server is alive.\n").
-spec check(
coinglecko@client:client(),
fun((gleam@http@request:request(binary())) -> {ok,
gleam@http@response:response(binary())} |
{error, binary()})
) -> {ok, ping_response()} | {error, coinglecko@error:coin_gecko_error()}.
check(Client, Sender) ->
gleam@result:'try'(
check_request(Client),
fun(Req) ->
coinglecko@request:send_and_decode(Req, ping_decoder(), Sender)
end
).