-module(aion_client@payload).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/aion_client/payload.gleam").
-export([encode/2, decode/2]).
-export_type([payload/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(" Typed JSON encoder/decoder helpers and raw Payload escape hatch.\n").
-type payload() :: {payload, binary(), binary()}.
-file("src/aion_client/payload.gleam", 18).
?DOC(" Encode a typed value as a JSON Payload.\n").
-spec encode(FES, fun((FES) -> gleam@json:json())) -> payload().
encode(Value, Encoder) ->
{payload,
<<"application/json"/utf8>>,
begin
_pipe = Value,
_pipe@1 = Encoder(_pipe),
gleam@json:to_string(_pipe@1)
end}.
-file("src/aion_client/payload.gleam", 39).
-spec map_decode_error({ok, FEX} | {error, gleam@json:decode_error()}) -> {ok,
FEX} |
{error, aion_client@error:error()}.
map_decode_error(Result) ->
case Result of
{ok, Value} ->
{ok, Value};
{error, _} ->
{error, invalid_argument}
end.
-file("src/aion_client/payload.gleam", 27).
?DOC(
" Decode a JSON Payload into a typed value. Decode failures are explicit data\n"
" and map to InvalidArgument rather than panicking or silently defaulting.\n"
).
-spec decode(payload(), gleam@dynamic@decode:decoder(FET)) -> {ok, FET} |
{error, aion_client@error:error()}.
decode(Payload, Decoder) ->
{payload, Content_type, Bytes} = Payload,
case Content_type =:= <<"application/json"/utf8>> of
true ->
_pipe = Bytes,
_pipe@1 = gleam@json:parse(_pipe, Decoder),
map_decode_error(_pipe@1);
false ->
{error, invalid_argument}
end.