Current section

Files

Jump to
glixir src glixir@agent.erl
Raw

src/glixir@agent.erl

-module(glixir@agent).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/glixir/agent.gleam").
-export([start/1, start_named/2, get/3, get_timeout/4, update/2, cast/2, get_and_update/3, stop/2, pid/1]).
-export_type([agent/1, agent_error/0]).
-opaque agent(EDJ) :: {agent, gleam@erlang@process:pid_()} |
{gleam_phantom, EDJ}.
-type agent_error() :: {start_error, binary()} |
timeout |
agent_down |
{decode_error, binary()}.
-file("src/glixir/agent.gleam", 44).
-spec start(fun(() -> EDU)) -> {ok, agent(EDU)} | {error, agent_error()}.
start(Initial_fun) ->
case 'Elixir.Agent':start_link(Initial_fun, []) of
{ok, Pid} ->
{ok, {agent, Pid}};
{error, Reason} ->
{error, {start_error, gleam@string:inspect(Reason)}}
end.
-file("src/glixir/agent.gleam", 51).
-spec start_named(gleam@erlang@atom:atom_(), fun(() -> EDY)) -> {ok, agent(EDY)} |
{error, agent_error()}.
start_named(Name, Initial_fun) ->
Options = [erlang:list_to_tuple(
[gleam_erlang_ffi:identity(erlang:binary_to_atom(<<"name"/utf8>>)),
gleam_erlang_ffi:identity(Name)]
)],
case 'Elixir.Agent':start_link(Initial_fun, Options) of
{ok, Pid} ->
{ok, {agent, Pid}};
{error, Reason} ->
{error, {start_error, gleam@string:inspect(Reason)}}
end.
-file("src/glixir/agent.gleam", 64).
-spec get(agent(EEC), fun((EEC) -> EEE), gleam@dynamic@decode:decoder(EEE)) -> {ok,
EEE} |
{error, agent_error()}.
get(Agent, Fun, Decoder) ->
{agent, Pid} = Agent,
Result_dynamic = 'Elixir.Agent':get(Pid, Fun, 5000),
_pipe = gleam@dynamic@decode:run(Result_dynamic, Decoder),
_pipe@1 = gleam@result:map_error(_pipe, fun gleam@string:inspect/1),
gleam@result:map_error(_pipe@1, fun(Field@0) -> {decode_error, Field@0} end).
-file("src/glixir/agent.gleam", 76).
-spec get_timeout(
agent(EEI),
fun((EEI) -> EEK),
integer(),
gleam@dynamic@decode:decoder(EEK)
) -> {ok, EEK} | {error, agent_error()}.
get_timeout(Agent, Fun, Timeout, Decoder) ->
{agent, Pid} = Agent,
Result_dynamic = 'Elixir.Agent':get(Pid, Fun, Timeout),
_pipe = gleam@dynamic@decode:run(Result_dynamic, Decoder),
_pipe@1 = gleam@result:map_error(_pipe, fun gleam@string:inspect/1),
gleam@result:map_error(_pipe@1, fun(Field@0) -> {decode_error, Field@0} end).
-file("src/glixir/agent.gleam", 89).
-spec update(agent(EEO), fun((EEO) -> EEO)) -> {ok, nil} |
{error, agent_error()}.
update(Agent, Fun) ->
{agent, Pid} = Agent,
case erlang:atom_to_binary('Elixir.Agent':update(Pid, Fun, 5000)) of
<<"ok"/utf8>> ->
{ok, nil};
_ ->
{error, agent_down}
end.
-file("src/glixir/agent.gleam", 100).
-spec cast(agent(EES), fun((EES) -> EES)) -> nil.
cast(Agent, Fun) ->
{agent, Pid} = Agent,
_ = 'Elixir.Agent':cast(Pid, Fun),
nil.
-file("src/glixir/agent.gleam", 106).
-spec get_and_update(
agent(EEU),
fun((EEU) -> {EEW, EEU}),
gleam@dynamic@decode:decoder(EEW)
) -> {ok, EEW} | {error, agent_error()}.
get_and_update(Agent, Fun, Decoder) ->
{agent, Pid} = Agent,
Result_dynamic = 'Elixir.Agent':get_and_update(Pid, Fun, 5000),
_pipe = gleam@dynamic@decode:run(Result_dynamic, Decoder),
_pipe@1 = gleam@result:map_error(_pipe, fun gleam@string:inspect/1),
gleam@result:map_error(_pipe@1, fun(Field@0) -> {decode_error, Field@0} end).
-file("src/glixir/agent.gleam", 118).
-spec stop(agent(any()), gleam@erlang@atom:atom_()) -> {ok, nil} |
{error, agent_error()}.
stop(Agent, Reason) ->
{agent, Pid} = Agent,
case erlang:atom_to_binary('Elixir.Agent':stop(Pid, Reason, 5000)) of
<<"ok"/utf8>> ->
{ok, nil};
_ ->
{error, agent_down}
end.
-file("src/glixir/agent.gleam", 126).
-spec pid(agent(any())) -> gleam@erlang@process:pid_().
pid(Agent) ->
{agent, P} = Agent,
P.