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