Current section

Files

Jump to
sprocket src docs.erl
Raw

src/docs.erl

-module(docs).
-compile([no_auto_import, nowarn_unused_vars]).
-export([main/0]).
-spec handle_ws_message(
nil,
mist@internal@websocket:websocket_connection(),
mist:websocket_message(any()),
sprocket@cassette:live_service()
) -> gleam@otp@actor:next(any(), nil).
handle_ws_message(State, Conn, Message, Live_service) ->
{live_service, Id, On_msg, _, On_close} = Live_service,
case Message of
{text, Msg} ->
_assert_subject = gleam@bit_string:to_string(Msg),
{ok, Msg@1} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _assert_fail,
module => <<"docs"/utf8>>,
function => <<"handle_ws_message"/utf8>>,
line => 62})
end,
_ = On_msg(
Msg@1,
Id,
fun(Msg@2) ->
_assert_subject@1 = mist:send_text_frame(
Conn,
gleam@bit_string:from_string(Msg@2)
),
{ok, _} = case _assert_subject@1 of
{ok, _} -> _assert_subject@1;
_assert_fail@1 ->
erlang:error(#{gleam_error => let_assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _assert_fail@1,
module => <<"docs"/utf8>>,
function => <<"handle_ws_message"/utf8>>,
line => 69})
end,
{ok, nil}
end
),
gleam@otp@actor:continue(State);
closed ->
_ = On_close(Id),
{stop, normal};
shutdown ->
_ = On_close(Id),
{stop, normal};
_ ->
docs@utils@logger:info(
<<"Received unsupported websocket message type"/utf8>>
),
gleam@otp@actor:continue(State)
end.
-spec live_service(
gleam@http@request:request(mist@internal@http:connection()),
gleam@erlang@process:subject(sprocket@cassette:message())
) -> gleam@http@response:response(mist:response_data()).
live_service(Req, Ca) ->
Live_service = sprocket@cassette:live_service(Ca),
Selector = gleam@erlang@process:new_selector(),
_pipe = mist:websocket(Req),
_pipe@1 = mist:with_state(_pipe, nil),
_pipe@2 = mist:selecting(_pipe@1, Selector),
_pipe@3 = mist:on_message(
_pipe@2,
fun(State, Conn, Message) ->
handle_ws_message(State, Conn, Message, Live_service)
end
),
mist:upgrade(_pipe@3).
-spec mist_response(
gleam@http@response:response(gleam@bit_builder:bit_builder())
) -> gleam@http@response:response(mist:response_data()).
mist_response(Response) ->
_pipe = gleam@http@response:new(erlang:element(2, Response)),
gleam@http@response:set_body(_pipe, {bytes, erlang:element(4, Response)}).
-spec http_service(
gleam@http@request:request(mist@internal@http:connection()),
fun((gleam@http@request:request(bitstring())) -> gleam@http@response:response(gleam@bit_builder:bit_builder()))
) -> gleam@http@response:response(mist:response_data()).
http_service(Req, Router) ->
_pipe = Req,
_pipe@1 = mist:read_body(_pipe, (1024 * 1024) * 10),
_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),
gleam@http@response:set_body(
_pipe@5,
{bytes, gleam@bit_builder:new()}
)
end
).
-spec load_port() -> integer().
load_port() ->
_pipe = gleam@erlang@os: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() ->
docs@utils@logger:configure_backend(),
Port = load_port(),
Ca = sprocket@cassette:start(none),
Router = docs@routes:stack({app_context, Ca}),
_pipe = fun(Req) ->
case {erlang:element(2, Req), gleam@http@request:path_segments(Req)} of
{get, [<<"live"/utf8>>]} ->
live_service(Req, Ca);
{_, _} ->
http_service(Req, Router)
end
end,
_pipe@1 = mist:new(_pipe),
_pipe@2 = mist:port(_pipe@1, Port),
mist:start_http(_pipe@2),
_pipe@3 = gleam@string:concat(
[<<"Listening on localhost:"/utf8>>,
gleam@int:to_string(Port),
<<" ✨"/utf8>>]
),
docs@utils@logger:info(_pipe@3),
gleam@erlang@process:sleep_forever().