Current section

Files

Jump to
oaspec src oaspec@internal@codegen@client_ir.erl
Raw

src/oaspec@internal@codegen@client_ir.erl

-module(oaspec@internal@codegen@client_ir).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/oaspec/internal/codegen/client_ir.gleam").
-export([imports/2, analyze/1]).
-export_type([client_requirements/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).
-type client_requirements() :: {client_requirements,
boolean(),
boolean(),
boolean(),
boolean(),
boolean(),
boolean(),
boolean(),
boolean(),
boolean(),
boolean(),
boolean(),
boolean(),
boolean(),
boolean(),
boolean(),
boolean(),
boolean(),
boolean()}.
-file("src/oaspec/internal/codegen/client_ir.gleam", 603).
?DOC(false).
-spec resolve_to_object(
oaspec@internal@openapi@schema:schema_ref(),
oaspec@internal@codegen@context:context()
) -> gleam@option:option(oaspec@internal@openapi@schema:schema_object()).
resolve_to_object(Ref, Ctx) ->
case Ref of
{inline, S} ->
{some, S};
{reference, _, _} ->
case oaspec@internal@codegen@context:resolve_schema_ref(Ref, Ctx) of
{ok, S@1} ->
{some, S@1};
{error, _} ->
none
end
end.
-file("src/oaspec/internal/codegen/client_ir.gleam", 695).
?DOC(false).
-spec items_resolve_primitive_local(
oaspec@internal@openapi@schema:schema_ref(),
oaspec@internal@codegen@context:context()
) -> boolean().
items_resolve_primitive_local(Items, Ctx) ->
case Items of
{inline, {string_schema, _, _, _, _, _, _}} ->
true;
{inline, {integer_schema, _, _, _, _, _, _, _}} ->
true;
{inline, {number_schema, _, _, _, _, _, _, _}} ->
true;
{inline, {boolean_schema, _}} ->
true;
{reference, _, _} ->
case oaspec@internal@codegen@context:resolve_schema_ref(Items, Ctx) of
{ok, {string_schema, _, _, _, _, _, _}} ->
true;
{ok, {integer_schema, _, _, _, _, _, _, _}} ->
true;
{ok, {number_schema, _, _, _, _, _, _, _}} ->
true;
{ok, {boolean_schema, _}} ->
true;
_ ->
false
end;
_ ->
false
end.
-file("src/oaspec/internal/codegen/client_ir.gleam", 743).
?DOC(false).
-spec ref_contains_primitive(
oaspec@internal@openapi@schema:schema_ref(),
oaspec@internal@codegen@context:context(),
fun((oaspec@internal@openapi@schema:schema_object()) -> boolean())
) -> boolean().
ref_contains_primitive(Ref, Ctx, Pred) ->
case resolve_to_object(Ref, Ctx) of
{some, S} ->
case Pred(S) of
true ->
true;
false ->
case S of
{array_schema, _, Items, _, _, _} ->
ref_contains_primitive(Items, Ctx, Pred);
{object_schema, _, Properties, _, _, _, _} ->
_pipe = maps:to_list(Properties),
gleam@list:any(
_pipe,
fun(Entry) ->
{_, Child} = Entry,
ref_contains_primitive(Child, Ctx, Pred)
end
);
_ ->
false
end
end;
none ->
false
end.
-file("src/oaspec/internal/codegen/client_ir.gleam", 769).
?DOC(false).
-spec ref_contains_composite(
oaspec@internal@openapi@schema:schema_ref(),
oaspec@internal@codegen@context:context()
) -> boolean().
ref_contains_composite(Ref, Ctx) ->
case resolve_to_object(Ref, Ctx) of
{some, {one_of_schema, _, _, _}} ->
true;
{some, {any_of_schema, _, _, _}} ->
true;
{some, {all_of_schema, _, _}} ->
true;
{some, {array_schema, _, Items, _, _, _}} ->
ref_contains_composite(Items, Ctx);
{some, {object_schema, _, Properties, _, _, _, _}} ->
_pipe = maps:to_list(Properties),
gleam@list:any(
_pipe,
fun(Entry) ->
{_, Child_schema} = Entry,
ref_contains_composite(Child_schema, Ctx)
end
);
_ ->
false
end.
-file("src/oaspec/internal/codegen/client_ir.gleam", 825).
?DOC(false).
-spec object_properties_match(
oaspec@internal@openapi@schema:schema_object(),
oaspec@internal@codegen@context:context(),
fun((oaspec@internal@openapi@schema:schema_object()) -> boolean())
) -> boolean().
object_properties_match(Obj, Ctx, Pred) ->
case Obj of
{object_schema, _, Properties, _, _, _, _} ->
gleam@list:any(
maps:to_list(Properties),
fun(Entry) ->
{_, Prop_ref} = Entry,
case resolve_to_object(Prop_ref, Ctx) of
{some, Prop_schema} ->
Pred(Prop_schema) orelse object_properties_match(
Prop_schema,
Ctx,
Pred
);
none ->
false
end
end
);
_ ->
false
end.
-file("src/oaspec/internal/codegen/client_ir.gleam", 792).
?DOC(false).
-spec deep_object_param_has_property(
list({binary(),
oaspec@internal@openapi@spec:operation(oaspec@internal@openapi@spec:resolved()),
binary(),
oaspec@internal@openapi@spec:http_method()}),
oaspec@internal@codegen@context:context(),
fun((oaspec@internal@openapi@schema:schema_object()) -> boolean())
) -> boolean().
deep_object_param_has_property(Operations, Ctx, Pred) ->
gleam@list:any(
Operations,
fun(Op) ->
{_, Operation, _, _} = Op,
gleam@list:any(erlang:element(6, Operation), fun(Rp) -> case Rp of
{value, P} ->
case oaspec@internal@codegen@operation_ir:is_deep_object_param(
P,
Ctx
) of
false ->
false;
true ->
case oaspec@internal@openapi@spec:parameter_schema(
P
) of
{some, Ref} ->
case resolve_to_object(Ref, Ctx) of
{some, Obj} ->
object_properties_match(
Obj,
Ctx,
Pred
);
none ->
false
end;
none ->
false
end
end;
_ ->
false
end end)
end
).
-file("src/oaspec/internal/codegen/client_ir.gleam", 844).
?DOC(false).
-spec option_or_none(
gleam@option:option(oaspec@internal@openapi@schema:schema_ref())
) -> oaspec@internal@openapi@schema:schema_ref().
option_or_none(Ref) ->
case Ref of
{some, R} ->
R;
none ->
{inline,
{object_schema,
oaspec@internal@openapi@schema:default_metadata(),
maps:new(),
[],
unspecified,
none,
none}}
end.
-file("src/oaspec/internal/codegen/client_ir.gleam", 560).
?DOC(false).
-spec multipart_has_optional_complex_field(
list({binary(),
oaspec@internal@openapi@spec:operation(oaspec@internal@openapi@spec:resolved()),
binary(),
oaspec@internal@openapi@spec:http_method()}),
oaspec@internal@codegen@context:context()
) -> boolean().
multipart_has_optional_complex_field(Operations, Ctx) ->
gleam@list:any(
Operations,
fun(Op) ->
{_, Operation, _, _} = Op,
case erlang:element(7, Operation) of
{some, {value, Rb}} ->
case gleam_stdlib:map_get(
erlang:element(3, Rb),
<<"multipart/form-data"/utf8>>
) of
{ok, Media_type} ->
case resolve_to_object(
option_or_none(erlang:element(2, Media_type)),
Ctx
) of
{some,
{object_schema,
_,
Properties,
Required,
_,
_,
_}} ->
_pipe = maps:to_list(Properties),
gleam@list:any(
_pipe,
fun(Entry) ->
{Name, Prop_ref} = Entry,
Is_optional = not gleam@list:contains(
Required,
Name
),
Is_optional andalso case resolve_to_object(
Prop_ref,
Ctx
) of
{some,
{array_schema,
_,
_,
_,
_,
_}} ->
true;
{some,
{object_schema,
_,
_,
_,
_,
_,
_}} ->
true;
_ ->
false
end
end
);
_ ->
false
end;
{error, _} ->
false
end;
_ ->
false
end
end
).
-file("src/oaspec/internal/codegen/client_ir.gleam", 593).
?DOC(false).
-spec multipart_object_props(
gleam@option:option(oaspec@internal@openapi@schema:schema_ref()),
oaspec@internal@codegen@context:context()
) -> list({binary(), oaspec@internal@openapi@schema:schema_ref()}).
multipart_object_props(Media_schema, Ctx) ->
case resolve_to_object(option_or_none(Media_schema), Ctx) of
{some, {object_schema, _, Properties, _, _, _, _}} ->
maps:to_list(Properties);
_ ->
[]
end.
-file("src/oaspec/internal/codegen/client_ir.gleam", 533).
?DOC(false).
-spec multipart_has_field(
list({binary(),
oaspec@internal@openapi@spec:operation(oaspec@internal@openapi@spec:resolved()),
binary(),
oaspec@internal@openapi@spec:http_method()}),
oaspec@internal@codegen@context:context(),
fun((oaspec@internal@openapi@schema:schema_object()) -> boolean())
) -> boolean().
multipart_has_field(Operations, Ctx, Pred) ->
gleam@list:any(
Operations,
fun(Op) ->
{_, Operation, _, _} = Op,
case erlang:element(7, Operation) of
{some, {value, Rb}} ->
case gleam_stdlib:map_get(
erlang:element(3, Rb),
<<"multipart/form-data"/utf8>>
) of
{ok, Media_type} ->
_pipe = multipart_object_props(
erlang:element(2, Media_type),
Ctx
),
gleam@list:any(
_pipe,
fun(Entry) ->
{_, Prop_ref} = Entry,
case resolve_to_object(Prop_ref, Ctx) of
{some, S} ->
Pred(S);
none ->
false
end
end
);
{error, _} ->
false
end;
_ ->
false
end
end
).
-file("src/oaspec/internal/codegen/client_ir.gleam", 625).
?DOC(false).
-spec form_body_uses_json_escape(
oaspec@internal@openapi@spec:media_type(),
oaspec@internal@codegen@context:context()
) -> boolean().
form_body_uses_json_escape(Mt, Ctx) ->
Explicit = gleam@list:any(
maps:to_list(erlang:element(5, Mt)),
fun(Entry) ->
{_, Enc} = Entry,
case erlang:element(2, Enc) of
{some, Value} ->
case oaspec@internal@util@content_type:from_string(Value) of
application_json ->
true;
_ ->
false
end;
none ->
false
end
end
),
Composite = case resolve_to_object(
option_or_none(erlang:element(2, Mt)),
Ctx
) of
{some, {object_schema, _, Properties, _, _, _, _}} ->
_pipe = maps:to_list(Properties),
gleam@list:any(
_pipe,
fun(Entry@1) ->
{_, Child_schema} = Entry@1,
ref_contains_composite(Child_schema, Ctx)
end
);
_ ->
false
end,
Explicit orelse Composite.
-file("src/oaspec/internal/codegen/client_ir.gleam", 654).
?DOC(false).
-spec param_uses_json_escape(
oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:resolved()),
oaspec@internal@codegen@context:context()
) -> boolean().
param_uses_json_escape(Param, Ctx) ->
In_query = case erlang:element(3, Param) of
in_query ->
true;
_ ->
false
end,
Array_items = case erlang:element(6, Param) of
{parameter_schema, {inline, {array_schema, _, Items, _, _, _}}} ->
{some, Items};
{parameter_schema, {reference, _, _} = Sr} ->
case oaspec@internal@codegen@context:resolve_schema_ref(Sr, Ctx) of
{ok, {array_schema, _, Items@1, _, _, _}} ->
{some, Items@1};
_ ->
none
end;
_ ->
none
end,
Array_with_non_primitive_items = case {In_query, Array_items} of
{true, {some, Items@2}} ->
not items_resolve_primitive_local(Items@2, Ctx);
{_, _} ->
false
end,
Deep_object_composite = case oaspec@internal@codegen@operation_ir:is_deep_object_param(
Param,
Ctx
) of
true ->
case resolve_to_object(
option_or_none(
oaspec@internal@openapi@spec:parameter_schema(Param)
),
Ctx
) of
{some, {object_schema, _, Properties, _, _, _, _}} ->
_pipe = maps:to_list(Properties),
gleam@list:any(
_pipe,
fun(Entry) ->
{_, Child_schema} = Entry,
ref_contains_composite(Child_schema, Ctx)
end
);
_ ->
false
end;
false ->
false
end,
Array_with_non_primitive_items orelse Deep_object_composite.
-file("src/oaspec/internal/codegen/client_ir.gleam", 718).
?DOC(false).
-spec form_body_has_primitive(
list({binary(),
oaspec@internal@openapi@spec:operation(oaspec@internal@openapi@spec:resolved()),
binary(),
oaspec@internal@openapi@spec:http_method()}),
oaspec@internal@codegen@context:context(),
fun((oaspec@internal@openapi@schema:schema_object()) -> boolean())
) -> boolean().
form_body_has_primitive(Operations, Ctx, Pred) ->
gleam@list:any(
Operations,
fun(Op) ->
{_, Operation, _, _} = Op,
case erlang:element(7, Operation) of
{some, {value, Rb}} ->
gleam@list:any(
maps:to_list(erlang:element(3, Rb)),
fun(Ce) ->
{Ct_name, Mt} = Ce,
case oaspec@internal@util@content_type:from_string(
Ct_name
) of
form_url_encoded ->
case resolve_to_object(
option_or_none(erlang:element(2, Mt)),
Ctx
) of
{some, S} ->
ref_contains_primitive(
{inline, S},
Ctx,
Pred
);
none ->
false
end;
_ ->
false
end
end
);
_ ->
false
end
end
).
-file("src/oaspec/internal/codegen/client_ir.gleam", 860).
?DOC(false).
-spec option_import(client_requirements()) -> gleam@option:option(binary()).
option_import(Requirements) ->
case {erlang:element(12, Requirements),
erlang:element(13, Requirements),
erlang:element(14, Requirements)} of
{true, _, _} ->
{some, <<"gleam/option.{type Option, None, Some}"/utf8>>};
{false, true, true} ->
{some, <<"gleam/option.{None, Some}"/utf8>>};
{false, true, false} ->
{some, <<"gleam/option.{Some}"/utf8>>};
{false, false, true} ->
{some, <<"gleam/option.{None}"/utf8>>};
{false, false, false} ->
none
end.
-file("src/oaspec/internal/codegen/client_ir.gleam", 875).
?DOC(false).
-spec imports(client_requirements(), oaspec@internal@codegen@context:context()) -> list(binary()).
imports(Requirements, Ctx) ->
Base_imports = [<<"gleam/result"/utf8>>,
<<"oaspec/transport"/utf8>>,
<<(oaspec@config:package(oaspec@internal@codegen@context:config(Ctx)))/binary,
"/decode"/utf8>>,
<<(oaspec@config:package(oaspec@internal@codegen@context:config(Ctx)))/binary,
"/response_types"/utf8>>],
Base_imports@1 = case erlang:element(15, Requirements) of
true ->
[<<"gleam/int"/utf8>> | Base_imports];
false ->
Base_imports
end,
Base_imports@2 = case option_import(Requirements) of
{some, Import_line} ->
[Import_line | Base_imports@1];
none ->
Base_imports@1
end,
Base_imports@3 = case erlang:element(11, Requirements) of
true ->
lists:append(
[<<(oaspec@config:package(
oaspec@internal@codegen@context:config(Ctx)
))/binary,
"/types"/utf8>>,
<<(oaspec@config:package(
oaspec@internal@codegen@context:config(Ctx)
))/binary,
"/encode"/utf8>>],
Base_imports@2
);
false ->
Base_imports@2
end,
Base_imports@4 = [<<(oaspec@config:package(
oaspec@internal@codegen@context:config(Ctx)
))/binary,
"/request_types"/utf8>> |
Base_imports@3],
Base_imports@5 = case erlang:element(10, Requirements) of
true ->
[<<"gleam/string"/utf8>> | Base_imports@4];
false ->
Base_imports@4
end,
Imports = case erlang:element(8, Requirements) of
true ->
[<<"gleam/dynamic/decode as dyn_decode"/utf8>> | Base_imports@5];
false ->
Base_imports@5
end,
Imports@1 = case erlang:element(9, Requirements) of
true ->
[<<"gleam/json"/utf8>> | Imports];
false ->
Imports
end,
Imports@2 = case erlang:element(2, Requirements) of
true ->
[<<"gleam/bool"/utf8>> | Imports@1];
false ->
Imports@1
end,
Imports@3 = case erlang:element(3, Requirements) of
true ->
[<<"gleam/float"/utf8>> | Imports@2];
false ->
Imports@2
end,
Imports@4 = case erlang:element(7, Requirements) of
true ->
[<<"gleam/list"/utf8>> | Imports@3];
false ->
Imports@3
end,
Imports@5 = case erlang:element(18, Requirements) of
true ->
[<<"gleam/uri"/utf8>> | Imports@4];
false ->
Imports@4
end,
case erlang:element(19, Requirements) of
true ->
[<<(oaspec@config:package(
oaspec@internal@codegen@context:config(Ctx)
))/binary,
"/guards"/utf8>> |
Imports@5];
false ->
Imports@5
end.
-file("src/oaspec/internal/codegen/client_ir.gleam", 939).
?DOC(false).
-spec any_operation_has_server(oaspec@internal@codegen@context:context()) -> boolean().
any_operation_has_server(Ctx) ->
gleam@list:any(
oaspec@internal@codegen@context:operations(Ctx),
fun(Op) ->
{_, Operation, _, _} = Op,
case erlang:element(12, Operation) of
[] ->
case erlang:element(
6,
oaspec@internal@codegen@context:spec(Ctx)
) of
[] ->
false;
_ ->
true
end;
_ ->
true
end
end
).
-file("src/oaspec/internal/codegen/client_ir.gleam", 953).
?DOC(false).
-spec any_operation_has_no_server(oaspec@internal@codegen@context:context()) -> boolean().
any_operation_has_no_server(Ctx) ->
gleam@list:any(
oaspec@internal@codegen@context:operations(Ctx),
fun(Op) ->
{_, Operation, _, _} = Op,
case erlang:element(12, Operation) of
[] ->
case erlang:element(
6,
oaspec@internal@codegen@context:spec(Ctx)
) of
[] ->
true;
_ ->
false
end;
_ ->
false
end
end
).
-file("src/oaspec/internal/codegen/client_ir.gleam", 38).
?DOC(false).
-spec analyze(oaspec@internal@codegen@context:context()) -> client_requirements().
analyze(Ctx) ->
Operations = oaspec@internal@codegen@context:operations(Ctx),
All_params = gleam@list:flat_map(
Operations,
fun(Op) ->
{_, Operation, _, _} = Op,
gleam@list:filter_map(
erlang:element(6, Operation),
fun(Ref_p) -> case Ref_p of
{value, P} ->
{ok, P};
_ ->
{error, nil}
end end
)
end
),
Needs_bool = gleam@list:any(
All_params,
fun(P@1) -> case erlang:element(6, P@1) of
{parameter_schema, {inline, {boolean_schema, _}}} ->
true;
_ ->
false
end end
)
orelse deep_object_param_has_property(Operations, Ctx, fun(S) -> case S of
{boolean_schema, _} ->
true;
_ ->
false
end end),
Needs_float_param = gleam@list:any(
All_params,
fun(P@2) -> case erlang:element(6, P@2) of
{parameter_schema,
{inline, {number_schema, _, _, _, _, _, _, _}}} ->
true;
_ ->
false
end end
)
orelse deep_object_param_has_property(
Operations,
Ctx,
fun(S@1) -> case S@1 of
{number_schema, _, _, _, _, _, _, _} ->
true;
_ ->
false
end end
),
Has_multi_content_response = gleam@list:any(
Operations,
fun(Op@1) ->
{_, Operation@1, _, _} = Op@1,
gleam@list:any(
maps:to_list(erlang:element(8, Operation@1)),
fun(Entry) ->
{_, Ref_or} = Entry,
case Ref_or of
{value, Response} ->
erlang:length(
maps:to_list(erlang:element(3, Response))
)
> 1;
_ ->
false
end
end
)
end
),
Has_form_urlencoded = gleam@list:any(
Operations,
fun(Op@2) ->
{_, Operation@2, _, _} = Op@2,
case erlang:element(7, Operation@2) of
{some, {value, Rb}} ->
gleam@list:any(
maps:to_list(erlang:element(3, Rb)),
fun(Ce) ->
{Key, _} = Ce,
Key =:= <<"application/x-www-form-urlencoded"/utf8>>
end
);
_ ->
false
end
end
),
Has_multipart = gleam@list:any(
Operations,
fun(Op@3) ->
{_, Operation@3, _, _} = Op@3,
case erlang:element(7, Operation@3) of
{some, {value, Rb@1}} ->
gleam@list:any(
maps:to_list(erlang:element(3, Rb@1)),
fun(Ce@1) ->
{Key@1, _} = Ce@1,
Key@1 =:= <<"multipart/form-data"/utf8>>
end
);
_ ->
false
end
end
),
Has_multipart_array_field = multipart_has_field(
Operations,
Ctx,
fun(S@2) -> case S@2 of
{array_schema, _, _, _, _, _} ->
true;
_ ->
false
end end
),
Has_multipart_object_field = multipart_has_field(
Operations,
Ctx,
fun(S@3) -> case S@3 of
{object_schema, _, _, _, _, _, _} ->
true;
_ ->
false
end end
),
Has_multipart_optional_complex_field = multipart_has_optional_complex_field(
Operations,
Ctx
),
Has_deep_object_param = gleam@list:any(
Operations,
fun(Op@4) ->
{_, Operation@4, _, _} = Op@4,
gleam@list:any(erlang:element(6, Operation@4), fun(Rp) -> case Rp of
{value, P@3} ->
oaspec@internal@codegen@operation_ir:is_deep_object_param(
P@3,
Ctx
);
_ ->
false
end end)
end
),
Has_response_headers = gleam@list:any(
Operations,
fun(Op@5) ->
{_, Operation@5, _, _} = Op@5,
gleam@list:any(
maps:to_list(erlang:element(8, Operation@5)),
fun(Entry@1) ->
{_, Ref_or@1} = Entry@1,
case Ref_or@1 of
{value, Response@1} ->
maps:size(erlang:element(4, Response@1)) > 0;
_ ->
false
end
end
)
end
),
Has_optional_response_headers = gleam@list:any(
Operations,
fun(Op@6) ->
{_, Operation@6, _, _} = Op@6,
gleam@list:any(
maps:to_list(erlang:element(8, Operation@6)),
fun(Entry@2) ->
{_, Ref_or@2} = Entry@2,
case Ref_or@2 of
{value, Response@2} ->
gleam@list:any(
maps:to_list(erlang:element(4, Response@2)),
fun(H_entry) ->
{_, Header} = H_entry,
not erlang:element(3, Header)
end
);
_ ->
false
end
end
)
end
),
Needs_list = ((((((Has_form_urlencoded orelse Has_multi_content_response)
orelse Has_response_headers)
orelse Has_multipart_array_field)
orelse gleam@list:any(
All_params,
fun(P@4) -> erlang:element(3, P@4) =:= in_query end
))
orelse gleam@list:any(
All_params,
fun(P@5) -> erlang:element(3, P@5) =:= in_cookie end
))
orelse gleam@list:any(
All_params,
fun(P@6) -> erlang:element(3, P@6) =:= in_header end
))
orelse gleam@list:any(All_params, fun(P@7) -> case erlang:element(6, P@7) of
{parameter_schema, {inline, {array_schema, _, _, _, _, _}}} ->
true;
{parameter_schema, {reference, _, _} = Sr} ->
case oaspec@internal@codegen@context:resolve_schema_ref(
Sr,
Ctx
) of
{ok, {array_schema, _, _, _, _, _}} ->
true;
_ ->
false
end;
_ ->
false
end end),
Needs_dyn_decode = gleam@list:any(
Operations,
fun(Op@7) ->
{_, Operation@7, _, _} = Op@7,
gleam@list:any(
maps:to_list(erlang:element(8, Operation@7)),
fun(Entry@3) ->
{_, Ref_or@3} = Entry@3,
case Ref_or@3 of
{value, Response@3} ->
gleam@list:any(
maps:to_list(erlang:element(3, Response@3)),
fun(Ce@2) ->
{Media_type_name, Mt} = Ce@2,
case oaspec@internal@util@content_type:from_string(
Media_type_name
) of
text_plain ->
false;
application_octet_stream ->
false;
wildcard ->
false;
_ ->
case erlang:element(2, Mt) of
{some,
{inline,
{array_schema,
_,
_,
_,
_,
_}}} ->
true;
{some,
{inline,
{string_schema,
_,
_,
_,
_,
_,
_}}} ->
true;
{some,
{inline,
{integer_schema,
_,
_,
_,
_,
_,
_,
_}}} ->
true;
{some,
{inline,
{number_schema,
_,
_,
_,
_,
_,
_,
_}}} ->
true;
{some,
{inline,
{boolean_schema, _}}} ->
true;
_ ->
false
end
end
end
);
_ ->
false
end
end
)
end
),
Has_form_urlencoded_json_escape = gleam@list:any(
Operations,
fun(Op@8) ->
{_, Operation@8, _, _} = Op@8,
case erlang:element(7, Operation@8) of
{some, {value, Rb@2}} ->
gleam@list:any(
maps:to_list(erlang:element(3, Rb@2)),
fun(Ce@3) ->
{Ct_name, Mt@1} = Ce@3,
case oaspec@internal@util@content_type:from_string(
Ct_name
) of
form_url_encoded ->
form_body_uses_json_escape(Mt@1, Ctx);
_ ->
false
end
end
);
_ ->
false
end
end
),
Has_param_json_escape = gleam@list:any(
All_params,
fun(P@8) -> param_uses_json_escape(P@8, Ctx) end
),
Needs_json = (((Needs_dyn_decode orelse Has_multipart_object_field) orelse Has_form_urlencoded_json_escape)
orelse Has_param_json_escape)
orelse gleam@list:any(
Operations,
fun(Op@9) ->
{_, Operation@9, _, _} = Op@9,
case erlang:element(7, Operation@9) of
{some, {value, Rb@3}} ->
gleam@list:any(
maps:to_list(erlang:element(3, Rb@3)),
fun(Ce@4) ->
{Ct_name@1, Mt@2} = Ce@4,
case oaspec@internal@util@content_type:from_string(
Ct_name@1
) of
application_octet_stream ->
false;
wildcard ->
false;
_ ->
case erlang:element(2, Mt@2) of
{some,
{inline,
{string_schema,
_,
_,
_,
_,
_,
_}}} ->
true;
{some,
{inline,
{integer_schema,
_,
_,
_,
_,
_,
_,
_}}} ->
true;
{some,
{inline,
{number_schema,
_,
_,
_,
_,
_,
_,
_}}} ->
true;
{some, {inline, {boolean_schema, _}}} ->
true;
_ ->
false
end
end
end
);
_ ->
false
end
end
),
Needs_string = ((Has_multi_content_response orelse Has_form_urlencoded)
orelse Has_multipart)
orelse gleam@list:any(
All_params,
fun(P@9) ->
(erlang:element(3, P@9) =:= in_path) orelse (erlang:element(3, P@9)
=:= in_cookie)
end
),
Needs_typed_schemas = oaspec@internal@codegen@import_analysis:operations_need_typed_schemas(
Operations
),
Needs_option_type = oaspec@internal@codegen@import_analysis:operations_have_optional_params(
Operations
)
orelse oaspec@internal@codegen@import_analysis:operations_have_optional_body(
Operations
),
Needs_some_ctor = (((Needs_option_type orelse Has_optional_response_headers)
orelse any_operation_has_server(Ctx))
orelse Has_multipart_optional_complex_field)
orelse Has_deep_object_param,
Needs_none_ctor = (((Needs_option_type orelse Has_optional_response_headers)
orelse any_operation_has_no_server(Ctx))
orelse Has_multipart_optional_complex_field)
orelse Has_deep_object_param,
Has_int_response_header = gleam@list:any(
Operations,
fun(Op@10) ->
{_, Operation@10, _, _} = Op@10,
gleam@list:any(
maps:to_list(erlang:element(8, Operation@10)),
fun(Entry@4) ->
{_, Ref_or@4} = Entry@4,
case Ref_or@4 of
{value, Response@4} ->
gleam@list:any(
maps:to_list(erlang:element(4, Response@4)),
fun(H_entry@1) ->
{_, Header@1} = H_entry@1,
case erlang:element(4, Header@1) of
{some,
{inline,
{integer_schema,
_,
_,
_,
_,
_,
_,
_}}} ->
true;
_ ->
false
end
end
);
_ ->
false
end
end
)
end
),
Has_float_response_header = gleam@list:any(
Operations,
fun(Op@11) ->
{_, Operation@11, _, _} = Op@11,
gleam@list:any(
maps:to_list(erlang:element(8, Operation@11)),
fun(Entry@5) ->
{_, Ref_or@5} = Entry@5,
case Ref_or@5 of
{value, Response@5} ->
gleam@list:any(
maps:to_list(erlang:element(4, Response@5)),
fun(H_entry@2) ->
{_, Header@2} = H_entry@2,
case erlang:element(4, Header@2) of
{some,
{inline,
{number_schema,
_,
_,
_,
_,
_,
_,
_}}} ->
true;
_ ->
false
end
end
);
_ ->
false
end
end
)
end
),
Has_form_urlencoded_int = form_body_has_primitive(
Operations,
Ctx,
fun(S@4) -> case S@4 of
{integer_schema, _, _, _, _, _, _, _} ->
true;
_ ->
false
end end
),
Has_form_urlencoded_float = form_body_has_primitive(
Operations,
Ctx,
fun(S@5) -> case S@5 of
{number_schema, _, _, _, _, _, _, _} ->
true;
_ ->
false
end end
),
Has_form_urlencoded_bool = form_body_has_primitive(
Operations,
Ctx,
fun(S@6) -> case S@6 of
{boolean_schema, _} ->
true;
_ ->
false
end end
),
Needs_bool@1 = Needs_bool orelse Has_form_urlencoded_bool,
Needs_int = ((Has_int_response_header orelse Has_form_urlencoded_int) orelse gleam@list:any(
All_params,
fun(P@10) -> case erlang:element(6, P@10) of
{parameter_schema,
{inline, {integer_schema, _, _, _, _, _, _, _}}} ->
true;
{parameter_schema,
{inline,
{array_schema,
_,
{inline, {integer_schema, _, _, _, _, _, _, _}},
_,
_,
_}}} ->
true;
{parameter_schema, {reference, _, _} = Sr@1} ->
case oaspec@internal@codegen@context:resolve_schema_ref(
Sr@1,
Ctx
) of
{ok, {integer_schema, _, _, _, _, _, _, _}} ->
true;
{ok,
{array_schema,
_,
{inline, {integer_schema, _, _, _, _, _, _, _}},
_,
_,
_}} ->
true;
_ ->
false
end;
_ ->
false
end end
))
orelse deep_object_param_has_property(
Operations,
Ctx,
fun(S@7) -> case S@7 of
{integer_schema, _, _, _, _, _, _, _} ->
true;
_ ->
false
end end
),
Needs_float = (Needs_float_param orelse Has_float_response_header) orelse Has_form_urlencoded_float,
Needs_bytes_helper = gleam@list:any(
Operations,
fun(Op@12) ->
{_, Operation@12, _, _} = Op@12,
gleam@list:any(
maps:to_list(erlang:element(8, Operation@12)),
fun(Entry@6) ->
{_, Ref_or@6} = Entry@6,
case Ref_or@6 of
{value, Response@6} ->
gleam@list:any(
maps:to_list(erlang:element(3, Response@6)),
fun(Ce@5) ->
{Name, Mt@3} = Ce@5,
case {oaspec@internal@util@content_type:from_string(
Name
),
erlang:element(2, Mt@3)} of
{application_octet_stream, {some, _}} ->
true;
{wildcard, {some, _}} ->
true;
{_, _} ->
false
end
end
);
_ ->
false
end
end
)
end
),
Needs_text_helper = gleam@list:any(
Operations,
fun(Op@13) ->
{_, Operation@13, _, _} = Op@13,
gleam@list:any(
maps:to_list(erlang:element(8, Operation@13)),
fun(Entry@7) ->
{_, Ref_or@7} = Entry@7,
case Ref_or@7 of
{value, Response@7} ->
gleam@list:any(
maps:to_list(erlang:element(3, Response@7)),
fun(Ce@6) ->
{_, Mt@4} = Ce@6,
case erlang:element(2, Mt@4) of
{some, _} ->
true;
none ->
false
end
end
);
_ ->
false
end
end
)
end
),
Needs_uri = Has_form_urlencoded orelse gleam@list:any(
All_params,
fun(P@11) ->
(erlang:element(3, P@11) =:= in_path) orelse (erlang:element(
3,
P@11
)
=:= in_cookie)
end
),
Needs_guards = oaspec@config:validate(
oaspec@internal@codegen@context:config(Ctx)
)
andalso gleam@list:any(
Operations,
fun(Op@14) ->
{_, Operation@14, _, _} = Op@14,
case erlang:element(7, Operation@14) of
{some, {value, Rb@4}} ->
Content_entries = maps:to_list(erlang:element(3, Rb@4)),
case Content_entries of
[{_, Mt@5}] ->
case erlang:element(2, Mt@5) of
{some, {reference, _, Name@1}} ->
oaspec@internal@codegen@guards:schema_has_validator(
Name@1,
Ctx
);
_ ->
false
end;
_ ->
false
end;
_ ->
false
end
end
),
{client_requirements,
Needs_bool@1,
Needs_float,
Has_multi_content_response,
Has_form_urlencoded,
Has_multipart,
Needs_list,
Needs_dyn_decode,
Needs_json,
Needs_string,
Needs_typed_schemas,
Needs_option_type,
Needs_some_ctor,
Needs_none_ctor,
Needs_int,
Needs_bytes_helper,
Needs_text_helper,
Needs_uri,
Needs_guards}.