-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.