Packages
oaspec
0.25.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@schema.erl
-module(oaspec@openapi@schema).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/oaspec/openapi/schema.gleam").
-export([default_metadata/0, make_reference/1, get_metadata/1, is_nullable/1, get_provenance/1, set_metadata/2, set_internal/1, set_provenance/2]).
-export_type([origin_kind/0, schema_metadata/0, additional_properties/0, schema_object/0, schema_ref/0, discriminator/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 origin_kind() :: user_authored |
{hoisted_property, binary(), binary()} |
{hoisted_array_item, binary()} |
{hoisted_one_of_variant, binary(), integer()} |
{hoisted_any_of_variant, binary(), integer()} |
{hoisted_all_of_part, binary(), integer()} |
{hoisted_request_body, binary()} |
{hoisted_response, binary(), binary()} |
{hoisted_parameter, binary(), binary()} |
{hoisted_additional_properties, binary()}.
-type schema_metadata() :: {schema_metadata,
gleam@option:option(binary()),
boolean(),
boolean(),
gleam@option:option(binary()),
boolean(),
boolean(),
gleam@option:option(oaspec@openapi@value:json_value()),
gleam@option:option(oaspec@openapi@value:json_value()),
gleam@option:option(oaspec@openapi@value:json_value()),
gleam@option:option(list(binary())),
list(binary()),
boolean(),
origin_kind()}.
-type additional_properties() :: forbidden |
untyped |
{typed, schema_ref()} |
unspecified.
-type schema_object() :: {string_schema,
schema_metadata(),
gleam@option:option(binary()),
list(binary()),
gleam@option:option(integer()),
gleam@option:option(integer()),
gleam@option:option(binary())} |
{integer_schema,
schema_metadata(),
gleam@option:option(binary()),
gleam@option:option(integer()),
gleam@option:option(integer()),
gleam@option:option(integer()),
gleam@option:option(integer()),
gleam@option:option(integer())} |
{number_schema,
schema_metadata(),
gleam@option:option(binary()),
gleam@option:option(float()),
gleam@option:option(float()),
gleam@option:option(float()),
gleam@option:option(float()),
gleam@option:option(float())} |
{boolean_schema, schema_metadata()} |
{array_schema,
schema_metadata(),
schema_ref(),
gleam@option:option(integer()),
gleam@option:option(integer()),
boolean()} |
{object_schema,
schema_metadata(),
gleam@dict:dict(binary(), schema_ref()),
list(binary()),
additional_properties(),
gleam@option:option(integer()),
gleam@option:option(integer())} |
{all_of_schema, schema_metadata(), list(schema_ref())} |
{one_of_schema,
schema_metadata(),
list(schema_ref()),
gleam@option:option(discriminator())} |
{any_of_schema,
schema_metadata(),
list(schema_ref()),
gleam@option:option(discriminator())}.
-type schema_ref() :: {inline, schema_object()} |
{reference, binary(), binary()}.
-type discriminator() :: {discriminator,
binary(),
gleam@dict:dict(binary(), binary())}.
-file("src/oaspec/openapi/schema.gleam", 46).
?DOC(" Create default metadata with no description, not nullable, not deprecated.\n").
-spec default_metadata() -> schema_metadata().
default_metadata() ->
{schema_metadata,
none,
false,
false,
none,
false,
false,
none,
none,
none,
none,
[],
false,
user_authored}.
-file("src/oaspec/openapi/schema.gleam", 155).
?DOC(
" Extract the schema name from a $ref string (last path segment).\n"
" Example: \"#/components/schemas/User\" -> \"User\"\n"
).
-spec ref_to_schema_name(binary()) -> binary().
ref_to_schema_name(Ref) ->
case gleam@string:split(Ref, <<"/"/utf8>>) of
[] ->
<<"Unknown"/utf8>>;
Segments ->
_pipe = gleam@list:last(Segments),
gleam@result:unwrap(_pipe, <<"Unknown"/utf8>>)
end.
-file("src/oaspec/openapi/schema.gleam", 148).
?DOC(" Create a Reference from a $ref string, auto-extracting the name.\n").
-spec make_reference(binary()) -> schema_ref().
make_reference(Ref) ->
Name = ref_to_schema_name(Ref),
{reference, Ref, Name}.
-file("src/oaspec/openapi/schema.gleam", 175).
?DOC(" Extract the shared metadata from any schema variant.\n").
-spec get_metadata(schema_object()) -> schema_metadata().
get_metadata(Schema) ->
case Schema of
{string_schema, Metadata, _, _, _, _, _} ->
Metadata;
{integer_schema, Metadata@1, _, _, _, _, _, _} ->
Metadata@1;
{number_schema, Metadata@2, _, _, _, _, _, _} ->
Metadata@2;
{boolean_schema, Metadata@3} ->
Metadata@3;
{array_schema, Metadata@4, _, _, _, _} ->
Metadata@4;
{object_schema, Metadata@5, _, _, _, _, _} ->
Metadata@5;
{all_of_schema, Metadata@6, _} ->
Metadata@6;
{one_of_schema, Metadata@7, _, _} ->
Metadata@7;
{any_of_schema, Metadata@8, _, _} ->
Metadata@8
end.
-file("src/oaspec/openapi/schema.gleam", 170).
?DOC(" Check if a schema is nullable.\n").
-spec is_nullable(schema_object()) -> boolean().
is_nullable(Schema) ->
erlang:element(3, get_metadata(Schema)).
-file("src/oaspec/openapi/schema.gleam", 206).
?DOC(" Read the provenance of a schema. Unhoisted schemas return `UserAuthored`.\n").
-spec get_provenance(schema_object()) -> origin_kind().
get_provenance(Schema) ->
erlang:element(14, get_metadata(Schema)).
-file("src/oaspec/openapi/schema.gleam", 211).
?DOC(" Replace the metadata on a schema object.\n").
-spec set_metadata(schema_object(), schema_metadata()) -> schema_object().
set_metadata(Schema, Meta) ->
case Schema of
{string_schema, _, Format, Enum_values, Min_length, Max_length, Pattern} ->
{string_schema,
Meta,
Format,
Enum_values,
Min_length,
Max_length,
Pattern};
{integer_schema,
_,
Format@1,
Minimum,
Maximum,
Exclusive_minimum,
Exclusive_maximum,
Multiple_of} ->
{integer_schema,
Meta,
Format@1,
Minimum,
Maximum,
Exclusive_minimum,
Exclusive_maximum,
Multiple_of};
{number_schema,
_,
Format@2,
Minimum@1,
Maximum@1,
Exclusive_minimum@1,
Exclusive_maximum@1,
Multiple_of@1} ->
{number_schema,
Meta,
Format@2,
Minimum@1,
Maximum@1,
Exclusive_minimum@1,
Exclusive_maximum@1,
Multiple_of@1};
{boolean_schema, _} ->
{boolean_schema, Meta};
{array_schema, _, Items, Min_items, Max_items, Unique_items} ->
{array_schema, Meta, Items, Min_items, Max_items, Unique_items};
{object_schema,
_,
Properties,
Required,
Additional_properties,
Min_properties,
Max_properties} ->
{object_schema,
Meta,
Properties,
Required,
Additional_properties,
Min_properties,
Max_properties};
{all_of_schema, _, Schemas} ->
{all_of_schema, Meta, Schemas};
{one_of_schema, _, Schemas@1, Discriminator} ->
{one_of_schema, Meta, Schemas@1, Discriminator};
{any_of_schema, _, Schemas@2, Discriminator@1} ->
{any_of_schema, Meta, Schemas@2, Discriminator@1}
end.
-file("src/oaspec/openapi/schema.gleam", 190).
?DOC(" Mark a schema as internal (not part of the public generated API).\n").
-spec set_internal(schema_object()) -> schema_object().
set_internal(Schema) ->
Meta = get_metadata(Schema),
Meta@1 = {schema_metadata,
erlang:element(2, Meta),
erlang:element(3, Meta),
erlang:element(4, Meta),
erlang:element(5, Meta),
erlang:element(6, Meta),
erlang:element(7, Meta),
erlang:element(8, Meta),
erlang:element(9, Meta),
erlang:element(10, Meta),
erlang:element(11, Meta),
erlang:element(12, Meta),
true,
erlang:element(14, Meta)},
set_metadata(Schema, Meta@1).
-file("src/oaspec/openapi/schema.gleam", 199).
?DOC(
" Stamp the origin of a hoisted schema onto its metadata so downstream\n"
" consumers (diagnostics, tooling) can distinguish user-authored schemas\n"
" from synthetic ones created during the hoist pass.\n"
).
-spec set_provenance(schema_object(), origin_kind()) -> schema_object().
set_provenance(Schema, Origin) ->
Meta = get_metadata(Schema),
Meta@1 = {schema_metadata,
erlang:element(2, Meta),
erlang:element(3, Meta),
erlang:element(4, Meta),
erlang:element(5, Meta),
erlang:element(6, Meta),
erlang:element(7, Meta),
erlang:element(8, Meta),
erlang:element(9, Meta),
erlang:element(10, Meta),
erlang:element(11, Meta),
erlang:element(12, Meta),
erlang:element(13, Meta),
Origin},
set_metadata(Schema, Meta@1).