Current section

Files

Jump to
ewe src ewe.erl
Raw

src/ewe.erl

-module(ewe).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/ewe.gleam").
-export([new/1, port/2, start/1]).
-export_type([builder/0]).
-opaque builder() :: {builder,
fun((gleam@http@request:request(bitstring())) -> gleam@http@response:response(gleam@bytes_tree:bytes_tree())),
integer()}.
-file("src/ewe.gleam", 19).
-spec new(
fun((gleam@http@request:request(bitstring())) -> gleam@http@response:response(gleam@bytes_tree:bytes_tree()))
) -> builder().
new(Handler) ->
{builder, Handler, 8080}.
-file("src/ewe.gleam", 26).
-spec port(builder(), integer()) -> builder().
port(Builder, Port) ->
{builder, erlang:element(2, Builder), Port}.
-file("src/ewe.gleam", 30).
-spec start(builder()) -> {ok,
gleam@otp@actor:started(gleam@otp@static_supervisor:supervisor())} |
{error, gleam@otp@actor:start_error()}.
start(Builder) ->
_pipe@2 = glisten:new(
fun(_) -> {ewe@internal@parser:new_parser(), none} end,
fun(Parser, Msg, Conn) ->
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"/utf8>>,
function => <<"start"/utf8>>,
line => 34,
value => _assert_fail,
start => 850,
'end' => 886,
pattern_start => 861,
pattern_end => 880})
end,
Parser@1 = {parser,
erlang:element(2, Parser),
erlang:element(3, Parser),
erlang:element(4, Parser),
erlang:element(5, Parser),
erlang:element(6, Parser),
<<(erlang:element(7, Parser))/bitstring, Msg@2/bitstring>>},
case ewe@internal@parser:parse_request(Parser@1) of
{ok, Request} ->
Send = begin
_pipe = (erlang:element(2, Builder))(Request),
_pipe@1 = ewe@internal@response:encode(_pipe),
glisten:send(Conn, _pipe@1)
end,
case Send of
{ok, nil} ->
glisten:continue(ewe@internal@parser:new_parser());
{error, _} ->
glisten:stop()
end;
{error, {incomplete, Parser@2}} ->
glisten:continue(Parser@2);
{error, _} ->
glisten:stop()
end
end
),
_pipe@3 = glisten:bind(_pipe@2, <<"0.0.0.0"/utf8>>),
glisten:start(_pipe@3, erlang:element(3, Builder)).