Current section

Files

Jump to
oaspec src oaspec@openapi@parser_error.erl
Raw

src/oaspec@openapi@parser_error.erl

-module(oaspec@openapi@parser_error).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/oaspec/openapi/parser_error.gleam").
-export([missing_field_from_extraction/4, missing_field_from_selector/4]).
-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(
" Shared helpers for parser modules that need to turn a `yay`-level\n"
" extraction / selector failure into a `Diagnostic`. Split out of\n"
" `parser.gleam` so both top-level flow parsing and schema parsing can\n"
" depend on the same error shape without duplicating the hint-assembly\n"
" logic.\n"
).
-file("src/oaspec/openapi/parser_error.gleam", 15).
?DOC(
" Build a `missing_field` diagnostic from a `yay.ExtractionError`, folding\n"
" the extractor-internal detail into the diagnostic's hint so nothing is\n"
" silently dropped.\n"
).
-spec missing_field_from_extraction(
yay:extraction_error(),
binary(),
binary(),
oaspec@openapi@diagnostic:source_loc()
) -> oaspec@openapi@diagnostic:diagnostic().
missing_field_from_extraction(Err, Path, Field, Loc) ->
Base = oaspec@openapi@diagnostic:missing_field(Path, Field, Loc),
{diagnostic,
erlang:element(2, Base),
erlang:element(3, Base),
erlang:element(4, Base),
erlang:element(5, Base),
erlang:element(6, Base),
erlang:element(7, Base),
erlang:element(8, Base),
{some,
<<<<"Check your OpenAPI spec structure. ("/utf8,
(yay:extraction_error_to_string(Err))/binary>>/binary,
")"/utf8>>}}.
-file("src/oaspec/openapi/parser_error.gleam", 36).
?DOC(
" Build a `missing_field` diagnostic from a `yay.SelectorError`. The\n"
" selector error is collapsed to its constructor name since the detail\n"
" isn't meaningful to users, but we still thread it through rather than\n"
" discarding it outright.\n"
).
-spec missing_field_from_selector(
yay:selector_error(),
binary(),
binary(),
oaspec@openapi@diagnostic:source_loc()
) -> oaspec@openapi@diagnostic:diagnostic().
missing_field_from_selector(Err, Path, Field, Loc) ->
Detail = case Err of
{node_not_found, At} ->
<<"selector resolved up to segment "/utf8,
(erlang:integer_to_binary(At))/binary>>;
selector_parse_error ->
<<"selector parse error"/utf8>>
end,
Base = oaspec@openapi@diagnostic:missing_field(Path, Field, Loc),
{diagnostic,
erlang:element(2, Base),
erlang:element(3, Base),
erlang:element(4, Base),
erlang:element(5, Base),
erlang:element(6, Base),
erlang:element(7, Base),
erlang:element(8, Base),
{some,
<<<<"Check your OpenAPI spec structure. ("/utf8, Detail/binary>>/binary,
")"/utf8>>}}.