-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", 25). -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:log_error( <<"Error while reloading server code : "/utf8, Msg@1/binary>> ) end end, listen_to_file_changes(Subject, Clients). -file("src/olive.gleam", 14). ?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() -> any(). main() -> 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 => <<"main"/utf8>>, line => 17}) end, _ = olive@server_run:start_server(), _assert_subject@1 = olive@proxy:start_http(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 => <<"main"/utf8>>, line => 20}) end, listen_to_file_changes(Subject, Clients).