-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>>}}.