Current section
Files
Jump to
Current section
Files
src/glixir.erl
-module(glixir).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-define(FILEPATH, "src/glixir.gleam").
-export([start_supervisor/0, start_supervisor_simple/0, start_supervisor_named/2, child_spec/4, start_child/2, terminate_child/2, restart_child/2, delete_child/2, which_children/1, count_children/1, start_genserver/2, start_genserver_named/3, call_genserver/2, call_genserver_timeout/3, call_genserver_named/2, cast_genserver/2, cast_genserver_named/2, lookup_genserver/1, stop_genserver/1, genserver_pid/1, start_agent/1, start_agent_named/2, get_agent/3, get_agent_timeout/4, update_agent/2, cast_agent/2, get_and_update_agent/3, stop_agent/1, agent_pid/1, worker_spec/3, supervisor_spec/3]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(
" glixir - Seamless OTP interop between Gleam and Elixir/Erlang\n"
" \n"
" This module provides a unified API for working with OTP processes from Gleam.\n"
" Import this module to get access to Supervisors, GenServers, and Agents.\n"
).
-file("src/glixir.gleam", 63).
?DOC(" Start a supervisor with default options\n").
-spec start_supervisor() -> {ok, glixir@supervisor:supervisor()} |
{error, glixir@supervisor:supervisor_error()}.
start_supervisor() ->
glixir@supervisor:start_link_default().
-file("src/glixir.gleam", 68).
?DOC(" Start a simple supervisor with defaults\n").
-spec start_supervisor_simple() -> {ok, glixir@supervisor:supervisor()} |
{error, glixir@supervisor:supervisor_error()}.
start_supervisor_simple() ->
gleam_stdlib:println(<<"DEBUG: start_supervisor_simple called"/utf8>>),
Result = glixir@supervisor:start_dynamic_supervisor_simple(),
case Result of
{ok, Sup} ->
gleam_stdlib:println(
<<"DEBUG: simple supervisor started successfully"/utf8>>
),
{ok, Sup};
{error, Error} ->
gleam_stdlib:println(
<<"DEBUG: simple supervisor start failed with error: "/utf8,
(gleam@string:inspect(Error))/binary>>
),
{error, Error}
end.
-file("src/glixir.gleam", 88).
?DOC(" Start a named supervisor using DynamicSupervisor\n").
-spec start_supervisor_named(
binary(),
list({binary(), gleam@dynamic:dynamic_()})
) -> {ok, glixir@supervisor:supervisor()} |
{error, glixir@supervisor:supervisor_error()}.
start_supervisor_named(Name, _) ->
gleam_stdlib:println(
<<"DEBUG: start_supervisor_named called with name: "/utf8, Name/binary>>
),
Result = glixir@supervisor:start_dynamic_supervisor_named(Name),
case Result of
{ok, Sup} ->
gleam_stdlib:println(
<<"DEBUG: supervisor started successfully"/utf8>>
),
{ok, Sup};
{error, Error} ->
gleam_stdlib:println(
<<"DEBUG: supervisor start failed with error: "/utf8,
(gleam@string:inspect(Error))/binary>>
),
{error, Error}
end.
-file("src/glixir.gleam", 110).
?DOC(" Create a child specification\n").
-spec child_spec(binary(), binary(), binary(), list(gleam@dynamic:dynamic_())) -> glixir@supervisor:simple_child_spec().
child_spec(Id, Module, Function, Args) ->
glixir@supervisor:child_spec(Id, Module, Function, Args).
-file("src/glixir.gleam", 120).
?DOC(" Start a child process in the supervisor\n").
-spec start_child(
glixir@supervisor:supervisor(),
glixir@supervisor:simple_child_spec()
) -> {ok, gleam@erlang@process:pid_()} | {error, binary()}.
start_child(Supervisor, Spec) ->
gleam_stdlib:println(
<<"DEBUG: start_child called with spec id: "/utf8,
(erlang:element(2, Spec))/binary>>
),
Result = glixir@supervisor:start_child_simple(Supervisor, Spec),
case Result of
{ok, Pid} ->
gleam_stdlib:println(
<<"DEBUG: child started successfully with PID"/utf8>>
),
{ok, Pid};
{error, Error} ->
gleam_stdlib:println(
<<"DEBUG: child start failed with error: "/utf8, Error/binary>>
),
{error, Error}
end.
-file("src/glixir.gleam", 140).
?DOC(" Terminate a child process\n").
-spec terminate_child(glixir@supervisor:supervisor(), binary()) -> {ok, nil} |
{error, glixir@supervisor:child_operation_error()}.
terminate_child(Supervisor, Child_id) ->
case glixir@supervisor:terminate_child(Supervisor, Child_id) of
terminate_child_ok ->
{ok, nil};
{terminate_child_error, Error} ->
{error, Error}
end.
-file("src/glixir.gleam", 151).
?DOC(" Restart a child process\n").
-spec restart_child(glixir@supervisor:supervisor(), binary()) -> {ok,
gleam@erlang@process:pid_()} |
{error, glixir@supervisor:child_operation_error()}.
restart_child(Supervisor, Child_id) ->
case glixir@supervisor:restart_child(Supervisor, Child_id) of
{restart_child_ok, Pid} ->
{ok, Pid};
{restart_child_ok_already_started, Pid@1} ->
{ok, Pid@1};
{restart_child_error, Error} ->
{error, Error}
end.
-file("src/glixir.gleam", 163).
?DOC(" Delete a child specification from the supervisor\n").
-spec delete_child(glixir@supervisor:supervisor(), binary()) -> {ok, nil} |
{error, glixir@supervisor:child_operation_error()}.
delete_child(Supervisor, Child_id) ->
case glixir@supervisor:delete_child(Supervisor, Child_id) of
delete_child_ok ->
{ok, nil};
{delete_child_error, Error} ->
{error, Error}
end.
-file("src/glixir.gleam", 174).
?DOC(" Get list of child processes\n").
-spec which_children(glixir@supervisor:supervisor()) -> list(glixir@supervisor:child_info_result()).
which_children(Supervisor) ->
glixir@supervisor:which_children(Supervisor).
-file("src/glixir.gleam", 181).
?DOC(" Count children by status\n").
-spec count_children(glixir@supervisor:supervisor()) -> glixir@supervisor:child_counts().
count_children(Supervisor) ->
glixir@supervisor:count_children(Supervisor).
-file("src/glixir.gleam", 190).
?DOC(" Start a GenServer using Module.start_link/1\n").
-spec start_genserver(binary(), any()) -> {ok, glixir@genserver:gen_server()} |
{error, glixir@genserver:gen_server_error()}.
start_genserver(Module, Args) ->
glixir@genserver:start_link(Module, Args).
-file("src/glixir.gleam", 198).
?DOC(" Start a named GenServer\n").
-spec start_genserver_named(binary(), binary(), any()) -> {ok,
glixir@genserver:gen_server()} |
{error, glixir@genserver:gen_server_error()}.
start_genserver_named(Module, Name, Args) ->
glixir@genserver:start_link_named(Module, Name, Args).
-file("src/glixir.gleam", 207).
?DOC(" Send a synchronous call to the GenServer (5s timeout)\n").
-spec call_genserver(glixir@genserver:gen_server(), any()) -> {ok, any()} |
{error, glixir@genserver:gen_server_error()}.
call_genserver(Server, Request) ->
glixir@genserver:call(Server, Request).
-file("src/glixir.gleam", 215).
?DOC(" Send a synchronous call with custom timeout\n").
-spec call_genserver_timeout(glixir@genserver:gen_server(), any(), integer()) -> {ok,
any()} |
{error, glixir@genserver:gen_server_error()}.
call_genserver_timeout(Server, Request, Timeout) ->
glixir@genserver:call_timeout(Server, Request, Timeout).
-file("src/glixir.gleam", 224).
?DOC(" Call a named GenServer\n").
-spec call_genserver_named(binary(), any()) -> {ok, any()} |
{error, glixir@genserver:gen_server_error()}.
call_genserver_named(Name, Request) ->
glixir@genserver:call_named(Name, Request).
-file("src/glixir.gleam", 232).
?DOC(" Send an asynchronous cast to the GenServer\n").
-spec cast_genserver(glixir@genserver:gen_server(), any()) -> {ok, nil} |
{error, glixir@genserver:gen_server_error()}.
cast_genserver(Server, Request) ->
glixir@genserver:cast(Server, Request).
-file("src/glixir.gleam", 240).
?DOC(" Cast to a named GenServer\n").
-spec cast_genserver_named(binary(), any()) -> {ok, nil} |
{error, glixir@genserver:gen_server_error()}.
cast_genserver_named(Name, Request) ->
glixir@genserver:cast_named(Name, Request).
-file("src/glixir.gleam", 248).
?DOC(" Look up a GenServer by registered name\n").
-spec lookup_genserver(binary()) -> {ok, glixir@genserver:gen_server()} |
{error, glixir@genserver:gen_server_error()}.
lookup_genserver(Name) ->
glixir@genserver:lookup_name(Name).
-file("src/glixir.gleam", 253).
?DOC(" Stop a GenServer gracefully\n").
-spec stop_genserver(glixir@genserver:gen_server()) -> {ok, nil} |
{error, glixir@genserver:gen_server_error()}.
stop_genserver(Server) ->
glixir@genserver:stop(Server).
-file("src/glixir.gleam", 258).
?DOC(" Get the PID of a GenServer\n").
-spec genserver_pid(glixir@genserver:gen_server()) -> gleam@erlang@process:pid_().
genserver_pid(Server) ->
glixir@genserver:pid(Server).
-file("src/glixir.gleam", 267).
?DOC(" Start a new Agent with initial state\n").
-spec start_agent(fun(() -> any())) -> {ok, glixir@agent:agent()} |
{error, glixir@agent:agent_error()}.
start_agent(Initial_fun) ->
glixir@agent:start(Initial_fun).
-file("src/glixir.gleam", 272).
?DOC(" Start an Agent with a name\n").
-spec start_agent_named(binary(), fun(() -> any())) -> {ok,
glixir@agent:agent()} |
{error, glixir@agent:agent_error()}.
start_agent_named(Name, Initial_fun) ->
glixir@agent:start_named(Name, Initial_fun).
-file("src/glixir.gleam", 280).
?DOC(" Get the current state from an Agent\n").
-spec get_agent(
glixir@agent:agent(),
fun((any()) -> EQW),
gleam@dynamic@decode:decoder(EQW)
) -> {ok, EQW} | {error, glixir@agent:agent_error()}.
get_agent(Agent, Fun, Decoder) ->
glixir@agent:get(Agent, Fun, Decoder).
-file("src/glixir.gleam", 289).
?DOC(" Get with custom timeout\n").
-spec get_agent_timeout(
glixir@agent:agent(),
fun((any()) -> ERB),
integer(),
gleam@dynamic@decode:decoder(ERB)
) -> {ok, ERB} | {error, glixir@agent:agent_error()}.
get_agent_timeout(Agent, Fun, Timeout, Decoder) ->
glixir@agent:get_timeout(Agent, Fun, Timeout, Decoder).
-file("src/glixir.gleam", 299).
?DOC(" Update the Agent state synchronously\n").
-spec update_agent(glixir@agent:agent(), fun((ERF) -> ERF)) -> {ok, nil} |
{error, glixir@agent:agent_error()}.
update_agent(Agent, Fun) ->
glixir@agent:update(Agent, Fun).
-file("src/glixir.gleam", 304).
?DOC(" Update the Agent state asynchronously\n").
-spec cast_agent(glixir@agent:agent(), fun((ERI) -> ERI)) -> nil.
cast_agent(Agent, Fun) ->
glixir@agent:cast(Agent, Fun).
-file("src/glixir.gleam", 309).
?DOC(" Get and update in one operation\n").
-spec get_and_update_agent(
glixir@agent:agent(),
fun((ERJ) -> {ERK, ERJ}),
gleam@dynamic@decode:decoder(ERK)
) -> {ok, ERK} | {error, glixir@agent:agent_error()}.
get_and_update_agent(Agent, Fun, Decoder) ->
glixir@agent:get_and_update(Agent, Fun, Decoder).
-file("src/glixir.gleam", 318).
?DOC(" Stop an Agent\n").
-spec stop_agent(glixir@agent:agent()) -> {ok, nil} |
{error, glixir@agent:agent_error()}.
stop_agent(Agent) ->
glixir@agent:stop(Agent).
-file("src/glixir.gleam", 323).
?DOC(" Get the PID of an Agent\n").
-spec agent_pid(glixir@agent:agent()) -> gleam@erlang@process:pid_().
agent_pid(Agent) ->
glixir@agent:pid(Agent).
-file("src/glixir.gleam", 332).
?DOC(" Create a simple worker child spec with defaults\n").
-spec worker_spec(binary(), binary(), list(gleam@dynamic:dynamic_())) -> glixir@supervisor:simple_child_spec().
worker_spec(Id, Module, Args) ->
{simple_child_spec,
Id,
erlang:binary_to_atom(Module),
erlang:binary_to_atom(<<"start_link"/utf8>>),
Args,
permanent,
5000,
worker}.
-file("src/glixir.gleam", 349).
?DOC(" Create a supervisor child spec\n").
-spec supervisor_spec(binary(), binary(), list(gleam@dynamic:dynamic_())) -> glixir@supervisor:simple_child_spec().
supervisor_spec(Id, Module, Args) ->
{simple_child_spec,
Id,
erlang:binary_to_atom(Module),
erlang:binary_to_atom(<<"start_link"/utf8>>),
Args,
permanent,
5000,
supervisor_child}.