-module(oaspec@internal@codegen@context). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/oaspec/internal/codegen/context.gleam"). -export([spec/1, config/1, operations/1, resolve_schema_ref/2, schema_metadata/2, new/2]). -export_type([context/0, file_target/0, write_mode/0, generated_file/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). -opaque context() :: {context, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:resolved()), oaspec@config:config(), list({binary(), oaspec@internal@openapi@spec:operation(oaspec@internal@openapi@spec:resolved()), binary(), oaspec@internal@openapi@spec:http_method()}), gleam@dict:dict(binary(), {ok, oaspec@internal@openapi@schema:schema_object()} | {error, oaspec@internal@openapi@resolver:resolve_error()})}. -type file_target() :: shared_target | server_target | client_target. -type write_mode() :: overwrite | skip_if_exists. -type generated_file() :: {generated_file, binary(), binary(), file_target(), write_mode()}. -file("src/oaspec/internal/codegen/context.gleam", 55). ?DOC(false). -spec spec(context()) -> oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:resolved()). spec(Ctx) -> erlang:element(2, Ctx). -file("src/oaspec/internal/codegen/context.gleam", 60). ?DOC(false). -spec config(context()) -> oaspec@config:config(). config(Ctx) -> erlang:element(3, Ctx). -file("src/oaspec/internal/codegen/context.gleam", 67). ?DOC(false). -spec operations(context()) -> list({binary(), oaspec@internal@openapi@spec:operation(oaspec@internal@openapi@spec:resolved()), binary(), oaspec@internal@openapi@spec:http_method()}). operations(Ctx) -> erlang:element(4, Ctx). -file("src/oaspec/internal/codegen/context.gleam", 76). ?DOC(false). -spec resolve_schema_ref(oaspec@internal@openapi@schema:schema_ref(), context()) -> {ok, oaspec@internal@openapi@schema:schema_object()} | {error, oaspec@internal@openapi@resolver:resolve_error()}. resolve_schema_ref(Schema_ref, Ctx) -> case Schema_ref of {inline, Schema_obj} -> {ok, Schema_obj}; {reference, Ref, _} -> case gleam_stdlib:map_get(erlang:element(5, Ctx), Ref) of {ok, Resolved} -> Resolved; {error, _} -> oaspec@internal@openapi@resolver:resolve_schema_ref( Schema_ref, erlang:element(2, Ctx) ) end end. -file("src/oaspec/internal/codegen/context.gleam", 92). ?DOC(false). -spec schema_metadata(oaspec@internal@openapi@schema:schema_ref(), context()) -> gleam@option:option(oaspec@internal@openapi@schema:schema_metadata()). schema_metadata(Schema_ref, Ctx) -> case resolve_schema_ref(Schema_ref, Ctx) of {ok, Schema_obj} -> {some, oaspec@internal@openapi@schema:get_metadata(Schema_obj)}; {error, _} -> none end. -file("src/oaspec/internal/codegen/context.gleam", 121). ?DOC(false). -spec component_schema_ref(binary()) -> binary(). component_schema_ref(Name) -> <<"#/components/schemas/"/utf8, Name/binary>>. -file("src/oaspec/internal/codegen/context.gleam", 103). ?DOC(false). -spec build_schema_cache( oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:resolved()) ) -> gleam@dict:dict(binary(), {ok, oaspec@internal@openapi@schema:schema_object()} | {error, oaspec@internal@openapi@resolver:resolve_error()}). build_schema_cache(Spec) -> case erlang:element(5, Spec) of {some, Components} -> gleam@list:fold( maps:to_list(erlang:element(2, Components)), maps:new(), fun(Acc, Entry) -> {Name, _} = Entry, Ref = component_schema_ref(Name), gleam@dict:insert( Acc, Ref, oaspec@internal@openapi@resolver:resolve_schema_ref( {reference, Ref, Name}, Spec ) ) end ); none -> maps:new() end. -file("src/oaspec/internal/codegen/context.gleam", 45). ?DOC(false). -spec new( oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:resolved()), oaspec@config:config() ) -> context(). new(Spec, Config) -> {context, Spec, Config, oaspec@internal@openapi@operations:collect_operations(Spec), build_schema_cache(Spec)}.