Packages
🐑 a fluffy Gleam web server
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
src/ewe@internal@handler.erl
-module(ewe@internal@handler).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/ewe/internal/handler.gleam").
-export([loop/2]).
-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/ewe/internal/handler.gleam", 31).
?DOC(false).
-spec run(
gleam@http@request:request(ewe@internal@http:connection()),
fun((gleam@http@request:request(ewe@internal@http:connection())) -> gleam@http@response:response(gleam@bytes_tree:bytes_tree())),
gleam@http@response:response(gleam@bytes_tree:bytes_tree()),
ewe@internal@http:http_version()
) -> {ok, nil} | {error, glisten@socket:socket_reason()}.
run(Req, Handler, On_crash, Version) ->
_pipe = ewe_ffi:rescue(fun() -> Handler(Req) end),
_pipe@1 = gleam@result:map_error(_pipe, fun(_) -> On_crash end),
_pipe@2 = gleam@result:unwrap_both(_pipe@1),
_pipe@3 = ewe@internal@response:append_default_headers(_pipe@2, Version),
_pipe@4 = ewe@internal@response:encode(_pipe@3),
glisten@transport:send(
erlang:element(2, erlang:element(4, Req)),
erlang:element(3, erlang:element(4, Req)),
_pipe@4
).
-file("src/ewe/internal/handler.gleam", 12).
?DOC(false).
-spec loop(
fun((gleam@http@request:request(ewe@internal@http:connection())) -> gleam@http@response:response(gleam@bytes_tree:bytes_tree())),
gleam@http@response:response(gleam@bytes_tree:bytes_tree())
) -> fun((ewe@internal@http:connection(), glisten:message(JJK), glisten:connection(JJK)) -> glisten:next(ewe@internal@http:connection(), glisten:message(JJK))).
loop(Handler, On_crash) ->
fun(Http_conn, Msg, _) ->
Msg@2 = case Msg of
{packet, Msg@1} -> Msg@1;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"ewe/internal/handler"/utf8>>,
function => <<"loop"/utf8>>,
line => 17,
value => _assert_fail,
start => 433,
'end' => 469,
pattern_start => 444,
pattern_end => 463})
end,
_pipe = ewe@internal@http:parse_request(Http_conn, Msg@2),
_pipe@1 = gleam@result:map(
_pipe,
fun(Parsed) ->
case run(
erlang:element(2, Parsed),
Handler,
On_crash,
erlang:element(3, Parsed)
) of
{ok, nil} ->
glisten:continue(Http_conn);
{error, _} ->
glisten:stop()
end
end
),
_pipe@2 = gleam@result:replace_error(_pipe@1, glisten:stop()),
gleam@result:unwrap_both(_pipe@2)
end.