Current section
Files
Jump to
Current section
Files
src/glitch@types@reward.erl
-module(glitch@types@reward).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([reward_decoder/0, rewards_status_to_string/1, reward_status_from_string/1, reward_status_decoder/0]).
-export_type([reward/0, status/0]).
-type reward() :: {reward, binary(), binary(), integer(), binary()}.
-type status() :: canceled | fulfilled | unfulfilled | unknown.
-spec reward_decoder() -> fun((gleam@dynamic:dynamic_()) -> {ok, reward()} |
{error, list(gleam@dynamic:decode_error())}).
reward_decoder() ->
gleam@dynamic:decode4(
fun(Field@0, Field@1, Field@2, Field@3) -> {reward, Field@0, Field@1, Field@2, Field@3} end,
gleam@dynamic:field(<<"id"/utf8>>, fun gleam@dynamic:string/1),
gleam@dynamic:field(<<"title"/utf8>>, fun gleam@dynamic:string/1),
gleam@dynamic:field(<<"cost"/utf8>>, fun gleam@dynamic:int/1),
gleam@dynamic:field(<<"prompt"/utf8>>, fun gleam@dynamic:string/1)
).
-spec rewards_status_to_string(status()) -> binary().
rewards_status_to_string(Reward_status) ->
case Reward_status of
canceled ->
<<"canceled"/utf8>>;
fulfilled ->
<<"fulfilled"/utf8>>;
unfulfilled ->
<<"unfulfilled"/utf8>>;
unknown ->
<<"unknown"/utf8>>
end.
-spec reward_status_from_string(binary()) -> {ok, status()} | {error, nil}.
reward_status_from_string(String) ->
case String of
<<"canceled"/utf8>> ->
{ok, canceled};
<<"fulfilled"/utf8>> ->
{ok, fulfilled};
<<"unfulfilled"/utf8>> ->
{ok, unfulfilled};
<<"unknown"/utf8>> ->
{ok, unknown};
_ ->
{error, nil}
end.
-spec reward_status_decoder() -> fun((gleam@dynamic:dynamic_()) -> {ok,
status()} |
{error, list(gleam@dynamic:decode_error())}).
reward_status_decoder() ->
fun(Data) ->
gleam@result:'try'(
gleam@dynamic:string(Data),
fun(String) -> _pipe = String,
_pipe@1 = reward_status_from_string(_pipe),
gleam@result:replace_error(
_pipe@1,
[{decode_error,
<<"RewardsStatus"/utf8>>,
<<<<"String("/utf8, String/binary>>/binary,
")"/utf8>>,
[]}]
) end
)
end.