Current section
Files
Jump to
Current section
Files
src/docs.erl
-module(docs).
-compile([no_auto_import, nowarn_unused_vars]).
-export([main/0]).
-spec mist_response(
gleam@http@response:response(gleam@bit_builder:bit_builder())
) -> mist@internal@handler:handler_response().
mist_response(Response) ->
_pipe = Response,
mist:bit_builder_response(_pipe, erlang:element(4, Response)).
-spec http_service(
gleam@http@request:request(mist@internal@http:body()),
fun((gleam@http@request:request(bitstring())) -> gleam@http@response:response(gleam@bit_builder:bit_builder()))
) -> mist@internal@handler:handler_response().
http_service(Req, Router) ->
_pipe = Req,
_pipe@1 = mist:read_body(_pipe),
_pipe@4 = gleam@result:map(_pipe@1, fun(Http_req) -> _pipe@2 = Http_req,
_pipe@3 = Router(_pipe@2),
mist_response(_pipe@3) end),
gleam@result:unwrap(
_pipe@4,
begin
_pipe@5 = gleam@http@response:new(500),
mist:empty_response(_pipe@5)
end
).
-spec load_port() -> integer().
load_port() ->
_pipe = gleam_erlang_ffi:get_env(<<"PORT"/utf8>>),
_pipe@1 = gleam@result:then(_pipe, fun gleam@int:parse/1),
gleam@result:unwrap(_pipe@1, 3000).
-spec main() -> nil.
main() ->
sprocket_ffi:configure_logger_backend(),
Port = load_port(),
Ca = sprocket@cassette:start(),
Router = docs@routes:stack({app_context, Ca}),
_assert_subject = mist:serve(
Port,
mist:handler_func(
fun(Req) ->
case {erlang:element(2, Req),
gleam@http@request:path_segments(Req)} of
{get, [<<"live"/utf8>>]} ->
sprocket@cassette:live_service(Req, Ca);
{_, _} ->
http_service(Req, Router)
end
end
)
),
{ok, _} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _assert_fail,
module => <<"docs"/utf8>>,
function => <<"main"/utf8>>,
line => 24})
end,
_pipe = gleam@string:concat(
[<<"Listening on localhost:"/utf8>>,
gleam@int:to_string(Port),
<<" ✨"/utf8>>]
),
docs@utils@logger:info(_pipe),
gleam_erlang_ffi:sleep_forever().