Current section

Files

Jump to
libero src libero@json@error.erl
Raw

src/libero@json@error.erl

-module(libero@json@error).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/libero/json/error.gleam").
-export([at/2, to_frame_errors/1, prefix/2]).
-export_type([json_error/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.
-type json_error() :: {json_error, binary(), binary()}.
-file("src/libero/json/error.gleam", 7).
-spec at(binary(), binary()) -> json_error().
at(Path, Message) ->
{json_error, Path, Message}.
-file("src/libero/json/error.gleam", 13).
?DOC(
" Convert a list of JSON errors to protocol-neutral path+message tuples\n"
" suitable for the shared `ServerFrame` Error variant.\n"
).
-spec to_frame_errors(list(json_error())) -> list({binary(), binary()}).
to_frame_errors(Errors) ->
gleam@list:map(
Errors,
fun(E) -> {erlang:element(2, E), erlang:element(3, E)} end
).
-file("src/libero/json/error.gleam", 20).
?DOC(
" Append a segment to all error paths in the list. Used to contextualize\n"
" errors from nested decode (e.g. prepend \"fields.slug\" to errors from\n"
" decoding a String field).\n"
).
-spec prefix(list(json_error()), binary()) -> list(json_error()).
prefix(Errors, Segment) ->
gleam@list:map(Errors, fun(E) -> {json_error, case erlang:element(2, E) of
<<""/utf8>> ->
Segment;
_ ->
<<<<Segment/binary, "."/utf8>>/binary,
(erlang:element(2, E))/binary>>
end, erlang:element(3, E)} end).