Current section

Files

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

src/oaspec@internal@codegen@client_response.erl

-module(oaspec@internal@codegen@client_response).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/oaspec/internal/codegen/client_response.gleam").
-export([generate_multi_content_response/6, inline_schema_to_decoder/1, get_response_decode_expr/4, generate_single_content_response/7]).
-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/client_response.gleam", 108).
?DOC(false).
-spec generate_multi_content_response(
gleam@string_tree:string_tree(),
oaspec@internal@util@http:http_status_code(),
binary(),
list({binary(), oaspec@internal@openapi@spec:media_type()}),
binary(),
oaspec@internal@codegen@context:context()
) -> gleam@string_tree:string_tree().
generate_multi_content_response(Sb, Status_code, Variant_name, _, _, _) ->
_pipe = Sb,
_pipe@1 = oaspec@internal@util@string_extra:indent(
_pipe,
2,
<<(oaspec@internal@util@http:status_code_to_int_pattern(Status_code))/binary,
" -> {"/utf8>>
),
_pipe@2 = oaspec@internal@util@string_extra:indent(
_pipe@1,
3,
<<"use text <- result.try(text_body(resp.body))"/utf8>>
),
_pipe@3 = oaspec@internal@util@string_extra:indent(
_pipe@2,
3,
<<<<"Ok("/utf8, Variant_name/binary>>/binary, "(text))"/utf8>>
),
oaspec@internal@util@string_extra:indent(_pipe@3, 2, <<"}"/utf8>>).
-file("src/oaspec/internal/codegen/client_response.gleam", 164).
?DOC(false).
-spec inline_schema_to_decoder(oaspec@internal@openapi@schema:schema_object()) -> binary().
inline_schema_to_decoder(S) ->
case S of
{string_schema, _, _, _, _, _, _} ->
<<"dyn_decode.string"/utf8>>;
{integer_schema, _, _, _, _, _, _, _} ->
<<"dyn_decode.int"/utf8>>;
{number_schema, _, _, _, _, _, _, _} ->
<<"dyn_decode.float"/utf8>>;
{boolean_schema, _} ->
<<"dyn_decode.bool"/utf8>>;
_ ->
<<"dyn_decode.string"/utf8>>
end.
-file("src/oaspec/internal/codegen/client_response.gleam", 126).
?DOC(false).
-spec get_response_decode_expr(
oaspec@internal@openapi@schema:schema_ref(),
binary(),
oaspec@internal@util@http:http_status_code(),
oaspec@internal@codegen@context:context()
) -> binary().
get_response_decode_expr(Schema_ref, Op_id, Status_code, _) ->
case Schema_ref of
{reference, _, Name} ->
<<<<"decode.decode_"/utf8,
(oaspec@internal@util@naming:to_snake_case(Name))/binary>>/binary,
"(text)"/utf8>>;
{inline, {array_schema, _, Items, _, _, _}} ->
case Items of
{reference, _, Name@1} ->
<<<<"decode.decode_"/utf8,
(oaspec@internal@util@naming:to_snake_case(Name@1))/binary>>/binary,
"_list(text)"/utf8>>;
{inline, Inner} ->
Inner_decoder = inline_schema_to_decoder(Inner),
<<<<"json.parse(text, decode.list("/utf8,
Inner_decoder/binary>>/binary,
"))"/utf8>>
end;
{inline, {string_schema, _, _, _, _, _, _}} ->
<<"json.parse(text, dyn_decode.string)"/utf8>>;
{inline, {integer_schema, _, _, _, _, _, _, _}} ->
<<"json.parse(text, dyn_decode.int)"/utf8>>;
{inline, {number_schema, _, _, _, _, _, _, _}} ->
<<"json.parse(text, dyn_decode.float)"/utf8>>;
{inline, {boolean_schema, _}} ->
<<"json.parse(text, dyn_decode.bool)"/utf8>>;
{inline, _} ->
Fn_name = <<<<<<"decode_"/utf8,
(oaspec@internal@util@naming:to_snake_case(Op_id))/binary>>/binary,
"_response_"/utf8>>/binary,
(oaspec@internal@util@naming:to_snake_case(
oaspec@internal@util@http:status_code_suffix(Status_code)
))/binary>>,
<<<<"decode."/utf8, Fn_name/binary>>/binary, "(text)"/utf8>>
end.
-file("src/oaspec/internal/codegen/client_response.gleam", 18).
?DOC(false).
-spec generate_single_content_response(
gleam@string_tree:string_tree(),
oaspec@internal@util@http:http_status_code(),
binary(),
binary(),
oaspec@internal@openapi@spec:media_type(),
binary(),
oaspec@internal@codegen@context:context()
) -> gleam@string_tree:string_tree().
generate_single_content_response(
Sb,
Status_code,
Variant_name,
Media_type_name,
Media_type,
Op_id,
Ctx
) ->
case oaspec@internal@util@content_type:from_string(Media_type_name) of
application_octet_stream ->
case erlang:element(2, Media_type) of
{some, _} ->
_pipe = Sb,
_pipe@1 = oaspec@internal@util@string_extra:indent(
_pipe,
2,
<<(oaspec@internal@util@http:status_code_to_int_pattern(
Status_code
))/binary,
" -> {"/utf8>>
),
_pipe@2 = oaspec@internal@util@string_extra:indent(
_pipe@1,
3,
<<"use bytes <- result.try(bytes_body(resp.body))"/utf8>>
),
_pipe@3 = oaspec@internal@util@string_extra:indent(
_pipe@2,
3,
<<<<"Ok("/utf8, Variant_name/binary>>/binary,
"(bytes))"/utf8>>
),
oaspec@internal@util@string_extra:indent(
_pipe@3,
2,
<<"}"/utf8>>
);
_ ->
_pipe@4 = Sb,
oaspec@internal@util@string_extra:indent(
_pipe@4,
2,
<<<<<<(oaspec@internal@util@http:status_code_to_int_pattern(
Status_code
))/binary,
" -> Ok("/utf8>>/binary,
Variant_name/binary>>/binary,
")"/utf8>>
)
end;
text_plain ->
case erlang:element(2, Media_type) of
{some, _} ->
_pipe@5 = Sb,
_pipe@6 = oaspec@internal@util@string_extra:indent(
_pipe@5,
2,
<<(oaspec@internal@util@http:status_code_to_int_pattern(
Status_code
))/binary,
" -> {"/utf8>>
),
_pipe@7 = oaspec@internal@util@string_extra:indent(
_pipe@6,
3,
<<"use text <- result.try(text_body(resp.body))"/utf8>>
),
_pipe@8 = oaspec@internal@util@string_extra:indent(
_pipe@7,
3,
<<<<"Ok("/utf8, Variant_name/binary>>/binary,
"(text))"/utf8>>
),
oaspec@internal@util@string_extra:indent(
_pipe@8,
2,
<<"}"/utf8>>
);
_ ->
_pipe@9 = Sb,
oaspec@internal@util@string_extra:indent(
_pipe@9,
2,
<<<<<<(oaspec@internal@util@http:status_code_to_int_pattern(
Status_code
))/binary,
" -> Ok("/utf8>>/binary,
Variant_name/binary>>/binary,
")"/utf8>>
)
end;
application_xml ->
case erlang:element(2, Media_type) of
{some, _} ->
_pipe@5 = Sb,
_pipe@6 = oaspec@internal@util@string_extra:indent(
_pipe@5,
2,
<<(oaspec@internal@util@http:status_code_to_int_pattern(
Status_code
))/binary,
" -> {"/utf8>>
),
_pipe@7 = oaspec@internal@util@string_extra:indent(
_pipe@6,
3,
<<"use text <- result.try(text_body(resp.body))"/utf8>>
),
_pipe@8 = oaspec@internal@util@string_extra:indent(
_pipe@7,
3,
<<<<"Ok("/utf8, Variant_name/binary>>/binary,
"(text))"/utf8>>
),
oaspec@internal@util@string_extra:indent(
_pipe@8,
2,
<<"}"/utf8>>
);
_ ->
_pipe@9 = Sb,
oaspec@internal@util@string_extra:indent(
_pipe@9,
2,
<<<<<<(oaspec@internal@util@http:status_code_to_int_pattern(
Status_code
))/binary,
" -> Ok("/utf8>>/binary,
Variant_name/binary>>/binary,
")"/utf8>>
)
end;
text_xml ->
case erlang:element(2, Media_type) of
{some, _} ->
_pipe@5 = Sb,
_pipe@6 = oaspec@internal@util@string_extra:indent(
_pipe@5,
2,
<<(oaspec@internal@util@http:status_code_to_int_pattern(
Status_code
))/binary,
" -> {"/utf8>>
),
_pipe@7 = oaspec@internal@util@string_extra:indent(
_pipe@6,
3,
<<"use text <- result.try(text_body(resp.body))"/utf8>>
),
_pipe@8 = oaspec@internal@util@string_extra:indent(
_pipe@7,
3,
<<<<"Ok("/utf8, Variant_name/binary>>/binary,
"(text))"/utf8>>
),
oaspec@internal@util@string_extra:indent(
_pipe@8,
2,
<<"}"/utf8>>
);
_ ->
_pipe@9 = Sb,
oaspec@internal@util@string_extra:indent(
_pipe@9,
2,
<<<<<<(oaspec@internal@util@http:status_code_to_int_pattern(
Status_code
))/binary,
" -> Ok("/utf8>>/binary,
Variant_name/binary>>/binary,
")"/utf8>>
)
end;
_ ->
case erlang:element(2, Media_type) of
{some, Schema_ref} ->
Decode_expr = get_response_decode_expr(
Schema_ref,
Op_id,
Status_code,
Ctx
),
_pipe@10 = Sb,
_pipe@11 = oaspec@internal@util@string_extra:indent(
_pipe@10,
2,
<<(oaspec@internal@util@http:status_code_to_int_pattern(
Status_code
))/binary,
" -> {"/utf8>>
),
_pipe@12 = oaspec@internal@util@string_extra:indent(
_pipe@11,
3,
<<"use text <- result.try(text_body(resp.body))"/utf8>>
),
_pipe@13 = oaspec@internal@util@string_extra:indent(
_pipe@12,
3,
<<<<"case "/utf8, Decode_expr/binary>>/binary,
" {"/utf8>>
),
_pipe@14 = oaspec@internal@util@string_extra:indent(
_pipe@13,
4,
<<<<"Ok(decoded) -> Ok("/utf8, Variant_name/binary>>/binary,
"(decoded))"/utf8>>
),
_pipe@15 = oaspec@internal@util@string_extra:indent(
_pipe@14,
4,
<<"Error(_) -> Error(DecodeFailure(detail: \"Failed to decode response body\"))"/utf8>>
),
_pipe@16 = oaspec@internal@util@string_extra:indent(
_pipe@15,
3,
<<"}"/utf8>>
),
oaspec@internal@util@string_extra:indent(
_pipe@16,
2,
<<"}"/utf8>>
);
_ ->
_pipe@17 = Sb,
oaspec@internal@util@string_extra:indent(
_pipe@17,
2,
<<<<<<(oaspec@internal@util@http:status_code_to_int_pattern(
Status_code
))/binary,
" -> Ok("/utf8>>/binary,
Variant_name/binary>>/binary,
")"/utf8>>
)
end
end.