-module(glixir@genserver). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/glixir/genserver.gleam"). -export([start_link/2, start_link_named/3, call_timeout/4, call/3, cast/2, lookup_name/1, call_named/3, cast_named/2, stop/1, pid/1]). -export_type([gen_server/2, gen_server_error/0]). -opaque gen_server(EIF, EIG) :: {gen_server, gleam@erlang@process:pid_()} | {gleam_phantom, EIF, EIG}. -type gen_server_error() :: {start_error, binary()} | call_timeout | {call_error, binary()} | {cast_error, binary()} | {not_found, binary()} | {decode_error, list(gleam@dynamic@decode:decode_error())}. -file("src/glixir/genserver.gleam", 44). -spec start_link(binary(), gleam@dynamic:dynamic_()) -> {ok, gen_server(any(), any())} | {error, gen_server_error()}. start_link(Module, Args) -> Final_module_name = case gleam_stdlib:string_starts_with( Module, <<"Elixir."/utf8>> ) of true -> Module; false -> <<"Elixir."/utf8, Module/binary>> end, case glixir_ffi:start_genserver(Final_module_name, Args) of {ok, Pid} -> {ok, {gen_server, Pid}}; {error, Reason} -> {error, {start_error, gleam@string:inspect(Reason)}} end. -file("src/glixir/genserver.gleam", 58). -spec start_link_named(binary(), binary(), gleam@dynamic:dynamic_()) -> {ok, gen_server(any(), any())} | {error, gen_server_error()}. start_link_named(Module, Name, Args) -> Final_module_name = case gleam_stdlib:string_starts_with( Module, <<"Elixir."/utf8>> ) of true -> Module; false -> <<"Elixir."/utf8, Module/binary>> end, case glixir_ffi:start_genserver_named(Final_module_name, Name, Args) of {ok, Pid} -> {ok, {gen_server, Pid}}; {error, Reason} -> {error, {start_error, gleam@string:inspect(Reason)}} end. -file("src/glixir/genserver.gleam", 82). -spec call_timeout( gen_server(any(), EJG), gleam@dynamic:dynamic_(), integer(), gleam@dynamic@decode:decoder(EJG) ) -> {ok, EJG} | {error, gen_server_error()}. call_timeout(Server, Request, Timeout, Decoder) -> {gen_server, Pid} = Server, Response = gen_server:call(Pid, Request, Timeout), _pipe = gleam@dynamic@decode:run(Response, Decoder), gleam@result:map_error(_pipe, fun(Field@0) -> {decode_error, Field@0} end). -file("src/glixir/genserver.gleam", 74). -spec call( gen_server(any(), EIZ), gleam@dynamic:dynamic_(), gleam@dynamic@decode:decoder(EIZ) ) -> {ok, EIZ} | {error, gen_server_error()}. call(Server, Request, Decoder) -> call_timeout(Server, Request, 5000, Decoder). -file("src/glixir/genserver.gleam", 105). -spec cast(gen_server(any(), any()), gleam@dynamic:dynamic_()) -> {ok, nil} | {error, gen_server_error()}. cast(Server, Request) -> {gen_server, Pid} = Server, Result = gen_server:cast(Pid, Request), case erlang:atom_to_binary(Result) of <<"ok"/utf8>> -> {ok, nil}; Other -> {error, {cast_error, Other}} end. -file("src/glixir/genserver.gleam", 124). -spec lookup_name(gleam@erlang@atom:atom_()) -> {ok, gen_server(any(), any())} | {error, gen_server_error()}. lookup_name(Name) -> Pid_result = erlang:whereis(Name), case gleam_stdlib:classify_dynamic(Pid_result) of <<"Pid"/utf8>> -> {ok, {gen_server, gleam_stdlib:identity(Pid_result)}}; _ -> {error, {not_found, erlang:atom_to_binary(Name)}} end. -file("src/glixir/genserver.gleam", 94). -spec call_named( gleam@erlang@atom:atom_(), gleam@dynamic:dynamic_(), gleam@dynamic@decode:decoder(EJM) ) -> {ok, EJM} | {error, gen_server_error()}. call_named(Name, Request, Decoder) -> case lookup_name(Name) of {ok, Server} -> call(Server, Request, Decoder); {error, E} -> {error, E} end. -file("src/glixir/genserver.gleam", 117). -spec cast_named(gleam@erlang@atom:atom_(), gleam@dynamic:dynamic_()) -> {ok, nil} | {error, gen_server_error()}. cast_named(Name, Request) -> case lookup_name(Name) of {ok, Server} -> cast(Server, Request); {error, E} -> {error, E} end. -file("src/glixir/genserver.gleam", 134). -spec stop(gen_server(any(), any())) -> {ok, nil} | {error, gen_server_error()}. stop(_) -> {error, {cast_error, <<"Use cast/call with explicit Atom message for stop"/utf8>>}}. -file("src/glixir/genserver.gleam", 138). -spec pid(gen_server(any(), any())) -> gleam@erlang@process:pid_(). pid(Server) -> {gen_server, P} = Server, P.