Packages
oaspec
0.68.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@internal@openapi@resolver.erl
-module(oaspec@internal@openapi@resolver).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/oaspec/internal/openapi/resolver.gleam").
-export([ref_to_name/1, resolve_schema_ref/2]).
-export_type([resolve_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.
?MODULEDOC(false).
-type resolve_error() :: {unresolved_ref, binary()} | {circular_ref, binary()}.
-file("src/oaspec/internal/openapi/resolver.gleam", 20).
?DOC(false).
-spec ref_to_name(binary()) -> binary().
ref_to_name(Ref) ->
_pipe = Ref,
_pipe@1 = gleam@string:split(_pipe, <<"/"/utf8>>),
_pipe@2 = gleam@list:last(_pipe@1),
gleam@result:unwrap(_pipe@2, <<"Unknown"/utf8>>).
-file("src/oaspec/internal/openapi/resolver.gleam", 37).
?DOC(false).
-spec resolve_schema_ref_with_seen(
oaspec@openapi@schema:schema_ref(),
oaspec@openapi@spec:open_api_spec(oaspec@openapi@spec:resolved()),
gleam@set:set(binary())
) -> {ok, oaspec@openapi@schema:schema_object()} | {error, resolve_error()}.
resolve_schema_ref_with_seen(Schema_ref, Spec, Seen) ->
case Schema_ref of
{inline, Schema} ->
{ok, Schema};
{reference, Ref, Name} ->
case gleam@set:contains(Seen, Ref) of
true ->
{error, {circular_ref, Ref}};
false ->
New_seen = gleam@set:insert(Seen, Ref),
case erlang:element(5, Spec) of
{some, Components} ->
case gleam_stdlib:map_get(
erlang:element(2, Components),
Name
) of
{ok, {inline, Schema@1}} ->
{ok, Schema@1};
{ok, {reference, Inner_ref, Inner_name}} ->
resolve_schema_ref_with_seen(
{reference, Inner_ref, Inner_name},
Spec,
New_seen
);
{error, _} ->
{error, {unresolved_ref, Ref}}
end;
none ->
{error, {unresolved_ref, Ref}}
end
end
end.
-file("src/oaspec/internal/openapi/resolver.gleam", 29).
?DOC(false).
-spec resolve_schema_ref(
oaspec@openapi@schema:schema_ref(),
oaspec@openapi@spec:open_api_spec(oaspec@openapi@spec:resolved())
) -> {ok, oaspec@openapi@schema:schema_object()} | {error, resolve_error()}.
resolve_schema_ref(Schema_ref, Spec) ->
resolve_schema_ref_with_seen(Schema_ref, Spec, gleam@set:new()).