Packages
oaspec
0.64.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@internal@codegen@schema_utils.erl
-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", 14).
?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@codegen@context:resolve_schema_ref(
Schema_ref,
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", 37).
?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@codegen@context:resolve_schema_ref(
Schema_ref,
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", 63).
?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@codegen@context:resolve_schema_ref(
Schema_ref,
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", 91).
?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@codegen@context:resolve_schema_ref(
Schema_ref,
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", 147).
?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, Metadata, _, [Single_value], _, _, _}}} ->
case erlang:element(3, Metadata) of
true ->
none;
false ->
{some, Single_value}
end;
{_, _} ->
none
end.
-file("src/oaspec/internal/codegen/schema_utils.gleam", 168).
?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 oaspec@internal@codegen@context:schema_metadata(Ref, Ctx) of
{some, Metadata} ->
erlang:element(3, Metadata);
none ->
false
end.
-file("src/oaspec/internal/codegen/schema_utils.gleam", 113).
?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@codegen@context:resolve_schema_ref(
Schema_ref,
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", 176).
?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 oaspec@internal@codegen@context:schema_metadata(Ref, Ctx) of
{some, Metadata} ->
erlang:element(6, Metadata);
none ->
false
end.
-file("src/oaspec/internal/codegen/schema_utils.gleam", 184).
?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 oaspec@internal@codegen@context:schema_metadata(Ref, Ctx) of
{some, Metadata} ->
erlang:element(7, Metadata);
none ->
false
end.
-file("src/oaspec/internal/codegen/schema_utils.gleam", 193).
?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", 233).
?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.