Packages
oaspec
0.24.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@codegen@types.erl
-module(oaspec@codegen@types).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/oaspec/codegen/types.gleam").
-export([schema_to_gleam_type/2, generate/1, merge_allof_schemas/2, schema_has_additional_properties/2, schema_has_optional_fields/2, schema_ref_is_read_only/2, schema_ref_is_write_only/2, filter_read_only_properties/2, filter_write_only_properties/2]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-file("src/oaspec/codegen/types.gleam", 42).
?DOC(
" Generate types from component schemas and anonymous types from operations.\n"
" Delegates to the IR pipeline: build IR declarations, then render to source.\n"
).
-spec generate_types(oaspec@codegen@context:context()) -> binary().
generate_types(Ctx) ->
_pipe = oaspec@codegen@ir_build:build_types_module(Ctx),
oaspec@codegen@ir_render:render(_pipe).
-file("src/oaspec/codegen/types.gleam", 49).
?DOC(
" Convert a schema object to a Gleam type string.\n"
" Delegates to schema_dispatch for the centralized type mapping.\n"
).
-spec schema_to_gleam_type(
oaspec@openapi@schema:schema_object(),
oaspec@codegen@context:context()
) -> binary().
schema_to_gleam_type(Schema, _) ->
oaspec@codegen@schema_dispatch:schema_type(Schema).
-file("src/oaspec/codegen/types.gleam", 57).
?DOC(
" Generate request types for all operations via the IR pipeline.\n"
" Shape of each RecordType matches the former string-builder output;\n"
" `gleam format` normalizes whitespace either way so the final on-disk\n"
" content is unchanged.\n"
).
-spec generate_request_types(
oaspec@codegen@context:context(),
list({binary(),
oaspec@openapi@spec:operation(oaspec@openapi@spec:resolved()),
binary(),
oaspec@openapi@spec:http_method()})
) -> binary().
generate_request_types(Ctx, _) ->
_pipe = oaspec@codegen@ir_build:build_request_types_module(Ctx),
oaspec@codegen@ir_render:render(_pipe).
-file("src/oaspec/codegen/types.gleam", 71).
?DOC(
" Generate response types for all operations via the IR pipeline.\n"
" Each operation becomes one `UnionType` with status-code-named\n"
" variants. Payload rules (empty / String / qualified schema type) are\n"
" preserved from the former string-builder output.\n"
).
-spec generate_response_types(
oaspec@codegen@context:context(),
list({binary(),
oaspec@openapi@spec:operation(oaspec@openapi@spec:resolved()),
binary(),
oaspec@openapi@spec:http_method()})
) -> binary().
generate_response_types(Ctx, _) ->
_pipe = oaspec@codegen@ir_build:build_response_types_module(Ctx),
oaspec@codegen@ir_render:render(_pipe).
-file("src/oaspec/codegen/types.gleam", 12).
?DOC(" Generate type definitions from OpenAPI schemas.\n").
-spec generate(oaspec@codegen@context:context()) -> list(oaspec@codegen@context:generated_file()).
generate(Ctx) ->
Operations = oaspec@openapi@operations:collect_operations(Ctx),
Types_content = generate_types(Ctx),
Request_types_content = generate_request_types(Ctx, Operations),
Response_types_content = generate_response_types(Ctx, Operations),
[{generated_file,
<<"types.gleam"/utf8>>,
Types_content,
shared_target,
overwrite},
{generated_file,
<<"request_types.gleam"/utf8>>,
Request_types_content,
shared_target,
overwrite},
{generated_file,
<<"response_types.gleam"/utf8>>,
Response_types_content,
shared_target,
overwrite}].
-file("src/oaspec/codegen/types.gleam", 87).
?DOC(" Re-export merge_allof_schemas.\n").
-spec merge_allof_schemas(
list(oaspec@openapi@schema:schema_ref()),
oaspec@codegen@context:context()
) -> oaspec@codegen@allof_merge:merged_all_of().
merge_allof_schemas(Schemas, Ctx) ->
oaspec@codegen@allof_merge:merge_allof_schemas(Schemas, Ctx).
-file("src/oaspec/codegen/types.gleam", 95).
?DOC(" Check if a schema has typed or untyped additionalProperties that would need Dict.\n").
-spec schema_has_additional_properties(
oaspec@openapi@schema:schema_ref(),
oaspec@codegen@context:context()
) -> boolean().
schema_has_additional_properties(Schema_ref, Ctx) ->
oaspec@codegen@schema_utils:schema_has_additional_properties(
Schema_ref,
Ctx
).
-file("src/oaspec/codegen/types.gleam", 103).
?DOC(" Check if a schema has any optional or nullable fields that would need Option.\n").
-spec schema_has_optional_fields(
oaspec@openapi@schema:schema_ref(),
oaspec@codegen@context:context()
) -> boolean().
schema_has_optional_fields(Schema_ref, Ctx) ->
oaspec@codegen@schema_utils:schema_has_optional_fields(Schema_ref, Ctx).
-file("src/oaspec/codegen/types.gleam", 108).
?DOC(" Check if a SchemaRef has readOnly metadata, resolving $ref if needed.\n").
-spec schema_ref_is_read_only(
oaspec@openapi@schema:schema_ref(),
oaspec@codegen@context:context()
) -> boolean().
schema_ref_is_read_only(Ref, Ctx) ->
oaspec@codegen@schema_utils:schema_ref_is_read_only(Ref, Ctx).
-file("src/oaspec/codegen/types.gleam", 113).
?DOC(" Check if a SchemaRef has writeOnly metadata, resolving $ref if needed.\n").
-spec schema_ref_is_write_only(
oaspec@openapi@schema:schema_ref(),
oaspec@codegen@context:context()
) -> boolean().
schema_ref_is_write_only(Ref, Ctx) ->
oaspec@codegen@schema_utils:schema_ref_is_write_only(Ref, Ctx).
-file("src/oaspec/codegen/types.gleam", 119).
?DOC(
" Filter readOnly properties from an ObjectSchema for request body context.\n"
" Returns a new schema with readOnly properties removed.\n"
).
-spec filter_read_only_properties(
oaspec@openapi@schema:schema_object(),
oaspec@codegen@context:context()
) -> oaspec@openapi@schema:schema_object().
filter_read_only_properties(Schema_obj, Ctx) ->
oaspec@codegen@schema_utils:filter_read_only_properties(Schema_obj, Ctx).
-file("src/oaspec/codegen/types.gleam", 128).
?DOC(
" Filter writeOnly properties from an ObjectSchema for response body context.\n"
" Returns a new schema with writeOnly properties removed.\n"
).
-spec filter_write_only_properties(
oaspec@openapi@schema:schema_object(),
oaspec@codegen@context:context()
) -> oaspec@openapi@schema:schema_object().
filter_write_only_properties(Schema_obj, Ctx) ->
oaspec@codegen@schema_utils:filter_write_only_properties(Schema_obj, Ctx).