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