Packages
oaspec
0.61.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@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}.