-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", 32). ?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()) ) -> {ok, nil} | {error, glisten@socket:socket_reason()}. run(Req, Handler, On_crash) -> Http_version@1 = case erlang:element(5, erlang:element(4, Req)) of {some, Http_version} -> Http_version; _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 => <<"run"/utf8>>, line => 37, value => _assert_fail, start => 1028, 'end' => 1088, pattern_start => 1039, pattern_end => 1064}) end, _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@http:append_default_headers(_pipe@2, Http_version@1), _pipe@4 = ewe@internal@encoder:encode_response(_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", 13). ?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(KCC), glisten:connection(KCC)) -> glisten:next(ewe@internal@http:connection(), glisten:message(KCC))). 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 => 18, value => _assert_fail, start => 506, 'end' => 542, pattern_start => 517, pattern_end => 536}) end, _pipe = ewe@internal@http:parse_request(Http_conn, Msg@2), _pipe@1 = gleam@result:map( _pipe, fun(Req) -> case run(Req, Handler, On_crash) 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.