-module(aws@lambda@response).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/aws/lambda/response.gleam").
-export([proxy_response/2, proxy_to_json/1, sqs_batch_to_json/1]).
-export_type([proxy_response/0, sqs_batch_response/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(
" Typed responses for Lambda integrations that expect a structured reply,\n"
" with encoders that produce the JSON Lambda marshals back to the caller.\n"
"\n"
" Use these as the `encode` argument to `aws/lambda.start_json`.\n"
).
-type proxy_response() :: {proxy_response,
integer(),
gleam@dict:dict(binary(), binary()),
list(binary()),
binary(),
boolean()}.
-type sqs_batch_response() :: {sqs_batch_response, list(binary())}.
-file("src/aws/lambda/response.gleam", 33).
?DOC(
" A `200 OK` proxy response with a body and no extra headers. Set further\n"
" fields with record-update syntax:\n"
"\n"
" ```gleam\n"
" response.proxy_response(201, \"{}\")\n"
" |> fn(r) { response.ProxyResponse(..r, headers: my_headers) }\n"
" ```\n"
).
-spec proxy_response(integer(), binary()) -> proxy_response().
proxy_response(Status_code, Body) ->
{proxy_response, Status_code, maps:new(), [], Body, false}.
-file("src/aws/lambda/response.gleam", 79).
-spec string_dict_to_json(gleam@dict:dict(binary(), binary())) -> gleam@json:json().
string_dict_to_json(Values) ->
_pipe = Values,
_pipe@1 = maps:to_list(_pipe),
_pipe@2 = gleam@list:map(
_pipe@1,
fun(Pair) ->
{erlang:element(1, Pair),
gleam@json:string(erlang:element(2, Pair))}
end
),
gleam@json:object(_pipe@2).
-file("src/aws/lambda/response.gleam", 44).
?DOC(" Encode a [`ProxyResponse`](#ProxyResponse) to its Lambda JSON form.\n").
-spec proxy_to_json(proxy_response()) -> gleam@json:json().
proxy_to_json(Response) ->
Base = [{<<"statusCode"/utf8>>, gleam@json:int(erlang:element(2, Response))},
{<<"headers"/utf8>>, string_dict_to_json(erlang:element(3, Response))},
{<<"body"/utf8>>, gleam@json:string(erlang:element(5, Response))},
{<<"isBase64Encoded"/utf8>>,
gleam@json:bool(erlang:element(6, Response))}],
Fields = case erlang:element(4, Response) of
[] ->
Base;
Cookies ->
[{<<"cookies"/utf8>>,
gleam@json:array(Cookies, fun gleam@json:string/1)} |
Base]
end,
gleam@json:object(Fields).
-file("src/aws/lambda/response.gleam", 68).
?DOC(" Encode an [`SqsBatchResponse`](#SqsBatchResponse) to its Lambda JSON form.\n").
-spec sqs_batch_to_json(sqs_batch_response()) -> gleam@json:json().
sqs_batch_to_json(Response) ->
gleam@json:object(
[{<<"batchItemFailures"/utf8>>,
gleam@json:array(
erlang:element(2, Response),
fun(Id) ->
gleam@json:object(
[{<<"itemIdentifier"/utf8>>, gleam@json:string(Id)}]
)
end
)}]
).