-module(oaspec@internal@codegen@schema_utils). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/oaspec/internal/codegen/schema_utils.gleam"). -export([schema_has_additional_properties/2, schema_has_forbidden_additional_properties/2, schema_has_non_discriminator_oneof/2, schema_has_untyped_additional_properties/2, constant_property_value/3, schema_ref_is_nullable/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. ?MODULEDOC(false). -file("src/oaspec/internal/codegen/schema_utils.gleam", 15). ?DOC(false). -spec schema_has_additional_properties( oaspec@internal@openapi@schema:schema_ref(), oaspec@internal@codegen@context:context() ) -> boolean(). schema_has_additional_properties(Schema_ref, Ctx) -> case Schema_ref of {inline, {object_schema, _, _, _, {typed, _}, _, _}} -> true; {inline, {object_schema, _, _, _, untyped, _, _}} -> true; {inline, {all_of_schema, _, Schemas}} -> gleam@list:any( Schemas, fun(S) -> schema_has_additional_properties(S, Ctx) end ); {reference, _, _} -> case oaspec@internal@openapi@resolver:resolve_schema_ref( Schema_ref, oaspec@internal@codegen@context:spec(Ctx) ) of {ok, Schema_obj} -> schema_has_additional_properties({inline, Schema_obj}, Ctx); {error, _} -> false end; _ -> false end. -file("src/oaspec/internal/codegen/schema_utils.gleam", 38). ?DOC(false). -spec schema_has_forbidden_additional_properties( oaspec@internal@openapi@schema:schema_ref(), oaspec@internal@codegen@context:context() ) -> boolean(). schema_has_forbidden_additional_properties(Schema_ref, Ctx) -> case Schema_ref of {inline, {object_schema, _, _, _, forbidden, _, _}} -> true; {inline, {all_of_schema, _, Schemas}} -> gleam@list:any( Schemas, fun(S) -> schema_has_forbidden_additional_properties(S, Ctx) end ); {reference, _, _} -> case oaspec@internal@openapi@resolver:resolve_schema_ref( Schema_ref, oaspec@internal@codegen@context:spec(Ctx) ) of {ok, Schema_obj} -> schema_has_forbidden_additional_properties( {inline, Schema_obj}, Ctx ); {error, _} -> false end; _ -> false end. -file("src/oaspec/internal/codegen/schema_utils.gleam", 64). ?DOC(false). -spec schema_has_non_discriminator_oneof( oaspec@internal@openapi@schema:schema_ref(), oaspec@internal@codegen@context:context() ) -> boolean(). schema_has_non_discriminator_oneof(Schema_ref, Ctx) -> case Schema_ref of {inline, {one_of_schema, _, Schemas, none}} -> gleam@list:any(Schemas, fun(S) -> case S of {reference, _, _} -> true; _ -> false end end); {inline, {one_of_schema, _, Schemas@1, _}} -> gleam@list:any( Schemas@1, fun(S@1) -> schema_has_non_discriminator_oneof(S@1, Ctx) end ); {inline, {all_of_schema, _, Schemas@2}} -> gleam@list:any( Schemas@2, fun(S@2) -> schema_has_non_discriminator_oneof(S@2, Ctx) end ); {reference, _, _} -> case oaspec@internal@openapi@resolver:resolve_schema_ref( Schema_ref, oaspec@internal@codegen@context:spec(Ctx) ) of {ok, Schema_obj} -> schema_has_non_discriminator_oneof( {inline, Schema_obj}, Ctx ); {error, _} -> false end; _ -> false end. -file("src/oaspec/internal/codegen/schema_utils.gleam", 92). ?DOC(false). -spec schema_has_untyped_additional_properties( oaspec@internal@openapi@schema:schema_ref(), oaspec@internal@codegen@context:context() ) -> boolean(). schema_has_untyped_additional_properties(Schema_ref, Ctx) -> case Schema_ref of {inline, {object_schema, _, _, _, untyped, _, _}} -> true; {inline, {all_of_schema, _, Schemas}} -> gleam@list:any( Schemas, fun(S) -> schema_has_untyped_additional_properties(S, Ctx) end ); {reference, _, _} -> case oaspec@internal@openapi@resolver:resolve_schema_ref( Schema_ref, oaspec@internal@codegen@context:spec(Ctx) ) of {ok, Schema_obj} -> schema_has_untyped_additional_properties( {inline, Schema_obj}, Ctx ); {error, _} -> false end; _ -> false end. -file("src/oaspec/internal/codegen/schema_utils.gleam", 148). ?DOC(false). -spec constant_property_value( oaspec@internal@openapi@schema:schema_ref(), binary(), list(binary()) ) -> gleam@option:option(binary()). constant_property_value(Prop_ref, Prop_name, Required) -> case {gleam@list:contains(Required, Prop_name), Prop_ref} of {true, {inline, {string_schema, _, _, [Single_value], _, _, _}}} -> {some, Single_value}; {_, _} -> none end. -file("src/oaspec/internal/codegen/schema_utils.gleam", 161). ?DOC(false). -spec schema_ref_is_nullable( oaspec@internal@openapi@schema:schema_ref(), oaspec@internal@codegen@context:context() ) -> boolean(). schema_ref_is_nullable(Ref, Ctx) -> case Ref of {inline, Inline_schema} -> oaspec@internal@openapi@schema:is_nullable(Inline_schema); {reference, _, _} -> case oaspec@internal@openapi@resolver:resolve_schema_ref( Ref, oaspec@internal@codegen@context:spec(Ctx) ) of {ok, Resolved} -> oaspec@internal@openapi@schema:is_nullable(Resolved); {error, _} -> false end end. -file("src/oaspec/internal/codegen/schema_utils.gleam", 114). ?DOC(false). -spec schema_has_optional_fields( oaspec@internal@openapi@schema:schema_ref(), oaspec@internal@codegen@context:context() ) -> boolean(). schema_has_optional_fields(Schema_ref, Ctx) -> case Schema_ref of {inline, {object_schema, _, Properties, Required, _, _, _}} -> _pipe = maps:to_list(Properties), gleam@list:any( _pipe, fun(Entry) -> {Prop_name, Prop_ref} = Entry, not gleam@list:contains(Required, Prop_name) orelse schema_ref_is_nullable( Prop_ref, Ctx ) end ); {inline, {all_of_schema, _, Schemas}} -> gleam@list:any( Schemas, fun(S) -> schema_has_optional_fields(S, Ctx) end ); {reference, _, _} -> case oaspec@internal@openapi@resolver:resolve_schema_ref( Schema_ref, oaspec@internal@codegen@context:spec(Ctx) ) of {ok, Schema_obj} -> schema_has_optional_fields({inline, Schema_obj}, Ctx); {error, _} -> false end; _ -> false end. -file("src/oaspec/internal/codegen/schema_utils.gleam", 174). ?DOC(false). -spec schema_ref_is_read_only( oaspec@internal@openapi@schema:schema_ref(), oaspec@internal@codegen@context:context() ) -> boolean(). schema_ref_is_read_only(Ref, Ctx) -> case Ref of {inline, Inline_schema} -> erlang:element( 6, oaspec@internal@openapi@schema:get_metadata(Inline_schema) ); {reference, _, _} -> case oaspec@internal@openapi@resolver:resolve_schema_ref( Ref, oaspec@internal@codegen@context:spec(Ctx) ) of {ok, Resolved} -> erlang:element( 6, oaspec@internal@openapi@schema:get_metadata(Resolved) ); {error, _} -> false end end. -file("src/oaspec/internal/codegen/schema_utils.gleam", 187). ?DOC(false). -spec schema_ref_is_write_only( oaspec@internal@openapi@schema:schema_ref(), oaspec@internal@codegen@context:context() ) -> boolean(). schema_ref_is_write_only(Ref, Ctx) -> case Ref of {inline, Inline_schema} -> erlang:element( 7, oaspec@internal@openapi@schema:get_metadata(Inline_schema) ); {reference, _, _} -> case oaspec@internal@openapi@resolver:resolve_schema_ref( Ref, oaspec@internal@codegen@context:spec(Ctx) ) of {ok, Resolved} -> erlang:element( 7, oaspec@internal@openapi@schema:get_metadata(Resolved) ); {error, _} -> false end end. -file("src/oaspec/internal/codegen/schema_utils.gleam", 201). ?DOC(false). -spec filter_read_only_properties( oaspec@internal@openapi@schema:schema_object(), oaspec@internal@codegen@context:context() ) -> oaspec@internal@openapi@schema:schema_object(). filter_read_only_properties(Schema_obj, Ctx) -> case Schema_obj of {object_schema, Metadata, Properties, Required, Additional_properties, Min_properties, Max_properties} -> Filtered_props = gleam@dict:filter( Properties, fun(_, Prop_ref) -> not schema_ref_is_read_only(Prop_ref, Ctx) end ), Filtered_required = gleam@list:filter( Required, fun(Name) -> case gleam_stdlib:map_get(Filtered_props, Name) of {ok, _} -> true; {error, _} -> false end end ), {object_schema, Metadata, Filtered_props, Filtered_required, Additional_properties, Min_properties, Max_properties}; _ -> Schema_obj end. -file("src/oaspec/internal/codegen/schema_utils.gleam", 241). ?DOC(false). -spec filter_write_only_properties( oaspec@internal@openapi@schema:schema_object(), oaspec@internal@codegen@context:context() ) -> oaspec@internal@openapi@schema:schema_object(). filter_write_only_properties(Schema_obj, Ctx) -> case Schema_obj of {object_schema, Metadata, Properties, Required, Additional_properties, Min_properties, Max_properties} -> Filtered_props = gleam@dict:filter( Properties, fun(_, Prop_ref) -> not schema_ref_is_write_only(Prop_ref, Ctx) end ), Filtered_required = gleam@list:filter( Required, fun(Name) -> case gleam_stdlib:map_get(Filtered_props, Name) of {ok, _} -> true; {error, _} -> false end end ), {object_schema, Metadata, Filtered_props, Filtered_required, Additional_properties, Min_properties, Max_properties}; _ -> Schema_obj end.