Packages
oaspec
0.14.0
0.68.0
0.67.0
0.66.0
0.65.0
0.64.0
0.63.0
0.62.0
0.61.0
0.60.0
0.59.0
0.58.1
0.58.0
0.57.0
0.56.0
0.55.0
0.54.0
0.53.0
0.52.0
0.51.0
0.50.0
0.49.0
0.48.0
0.47.0
0.46.0
0.45.0
0.44.0
0.43.0
0.42.0
0.41.0
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.0
0.34.0
0.33.0
0.32.0
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.0
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.0
0.7.0
0.6.3
0.6.1
0.6.0
0.5.0
0.4.0
0.3.0
0.1.3
Generate Gleam code from OpenAPI 3.x specifications
Current section
Files
Jump to
Current section
Files
src/oaspec@openapi@location_index.erl
-module(oaspec@openapi@location_index).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/oaspec/openapi/location_index.gleam").
-export([empty/0, lookup/2, lookup_field/3, build/1]).
-export_type([location_index/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.
-opaque location_index() :: {location_index,
gleam@dict:dict(binary(), oaspec@openapi@diagnostic:source_loc())}.
-file("src/oaspec/openapi/location_index.gleam", 29).
?DOC(" An empty index (no location information available).\n").
-spec empty() -> location_index().
empty() ->
{location_index, maps:new()}.
-file("src/oaspec/openapi/location_index.gleam", 35).
?DOC(
" Look up the source location for a given path.\n"
" Returns `NoSourceLoc` if the path is not in the index.\n"
).
-spec lookup(location_index(), binary()) -> oaspec@openapi@diagnostic:source_loc().
lookup(Index, Path) ->
case gleam_stdlib:map_get(erlang:element(2, Index), Path) of
{ok, Loc} ->
Loc;
{error, _} ->
no_source_loc
end.
-file("src/oaspec/openapi/location_index.gleam", 44).
?DOC(
" Look up the source location for a field within a parent path.\n"
" Tries `parent.field` first, then falls back to `parent`, then `NoSourceLoc`.\n"
).
-spec lookup_field(location_index(), binary(), binary()) -> oaspec@openapi@diagnostic:source_loc().
lookup_field(Index, Parent, Field) ->
Field_path = case Parent of
<<""/utf8>> ->
Field;
_ ->
<<<<Parent/binary, "."/utf8>>/binary, Field/binary>>
end,
case gleam_stdlib:map_get(erlang:element(2, Index), Field_path) of
{ok, Loc} ->
Loc;
{error, _} ->
case gleam_stdlib:map_get(erlang:element(2, Index), Parent) of
{ok, Loc@1} ->
Loc@1;
{error, _} ->
no_source_loc
end
end.
-file("src/oaspec/openapi/location_index.gleam", 14).
?DOC(
" Build a location index from raw YAML/JSON content.\n"
" On failure (e.g. invalid YAML), returns an empty index.\n"
).
-spec build(binary()) -> location_index().
build(Content) ->
case yaml_loc_ffi:build_location_index(Content) of
{ok, Pairs} ->
Entries = gleam@list:fold(
Pairs,
maps:new(),
fun(Acc, Pair) ->
{Path, {Line, Col}} = Pair,
gleam@dict:insert(Acc, Path, {source_loc, Line, Col})
end
),
{location_index, Entries};
{error, _} ->
empty()
end.