Current section
Files
Jump to
Current section
Files
src/olive.erl
-module(olive).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([main/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-file("src/olive.gleam", 39).
-spec listen_to_file_changes(
gleam@erlang@process:subject(olive@watcher:message()),
olive@client_registry:client_registry()
) -> any().
listen_to_file_changes(Subject, Clients) ->
Msg = gleam_erlang_ffi:'receive'(Subject),
case Msg of
files_changed ->
case olive@server_run:reload_server_code() of
{ok, _} ->
olive@client_registry:trigger(Clients);
{error, Msg@1} ->
olive@logging:error(Msg@1)
end
end,
listen_to_file_changes(Subject, Clients).
-file("src/olive.gleam", 26).
-spec run_olive(olive@config:config()) -> any().
run_olive(Config) ->
olive@logging:configure_logs(erlang:element(5, Config)),
Clients = olive@client_registry:start(),
Subject = gleam@erlang@process:new_subject(),
_assert_subject = olive@watcher:start(Subject),
{ok, _} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
value => _assert_fail,
module => <<"olive"/utf8>>,
function => <<"run_olive"/utf8>>,
line => 31})
end,
_ = olive@server_run:start_server(),
_assert_subject@1 = olive@proxy:start_http(Config, Clients),
{ok, _} = case _assert_subject@1 of
{ok, _} -> _assert_subject@1;
_assert_fail@1 ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
value => _assert_fail@1,
module => <<"olive"/utf8>>,
function => <<"run_olive"/utf8>>,
line => 34})
end,
listen_to_file_changes(Subject, Clients).
-file("src/olive.gleam", 16).
?DOC(
" Process is as follow:\n"
" - Start a client registry\n"
" - Start watcher, giving it a subject we will listen to.\n"
" - Every time watcher sends us a message:\n"
" - Reload server code\n"
" - Send reload message to clients\n"
).
-spec main() -> nil.
main() ->
Config = olive@config:parse_from_cli(),
case Config of
{some, Config@1} ->
run_olive(Config@1);
none ->
nil
end.