-module(radish@utils). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([prepare/1, execute/3, execute_blocking/3, receive_forever/3]). -spec prepare(list(binary())) -> bitstring(). prepare(Parts) -> _pipe = Parts, _pipe@1 = gleam@list:map(_pipe, fun(Field@0) -> {bulk_string, Field@0} end), _pipe@2 = {array, _pipe@1}, radish@encoder:encode(_pipe@2). -spec execute( gleam@erlang@process:subject(radish@client:message()), bitstring(), integer() ) -> {ok, list(radish@resp:value())} | {error, radish@error:error()}. execute(Client, Cmd, Timeout) -> gleam@result:then( begin _pipe = gleam@erlang@process:try_call( Client, fun(_capture) -> {command, Cmd, _capture, Timeout} end, Timeout ), gleam@result:replace_error(_pipe, actor_error) end, fun(Reply) -> gleam@result:then(Reply, fun(Reply@1) -> case Reply@1 of [{simple_error, Error}] -> {error, {server_error, Error}}; [{bulk_error, Error}] -> {error, {server_error, Error}}; Value -> {ok, Value} end end) end ). -spec execute_blocking( gleam@erlang@process:subject(radish@client:message()), bitstring(), integer() ) -> {ok, list(radish@resp:value())} | {error, radish@error:error()}. execute_blocking(Client, Cmd, Timeout) -> My_subject = gleam@erlang@process:new_subject(), gleam@erlang@process:send( Client, {blocking_command, Cmd, My_subject, Timeout} ), _pipe = gleam_erlang_ffi:new_selector(), _pipe@1 = gleam@erlang@process:selecting( _pipe, My_subject, fun gleam@function:identity/1 ), _pipe@2 = gleam_erlang_ffi:select(_pipe@1), (fun(Reply) -> case Reply of {ok, [{simple_error, Error}]} -> {error, {server_error, Error}}; {ok, [{bulk_error, Error}]} -> {error, {server_error, Error}}; {ok, Value} -> {ok, Value}; {error, Error@1} -> {error, Error@1} end end)(_pipe@2). -spec receive_forever( gleam@erlang@process:subject(radish@client:message()), integer(), fun(({ok, list(radish@resp:value())} | {error, radish@error:error()}) -> boolean()) ) -> nil. receive_forever(Client, Timeout, Rest) -> My_subject = gleam@erlang@process:new_subject(), gleam@erlang@process:send(Client, {receive_forever, My_subject, Timeout}), _pipe = gleam_erlang_ffi:new_selector(), _pipe@1 = gleam@erlang@process:selecting( _pipe, My_subject, fun gleam@function:identity/1 ), _pipe@2 = gleam_erlang_ffi:select(_pipe@1), (fun(Reply) -> case Reply of {ok, [{simple_error, Error}]} -> case Rest({error, {server_error, Error}}) of true -> receive_forever(Client, Timeout, Rest); false -> nil end; {ok, [{bulk_error, Error}]} -> case Rest({error, {server_error, Error}}) of true -> receive_forever(Client, Timeout, Rest); false -> nil end; Other -> case Rest(Other) of true -> receive_forever(Client, Timeout, Rest); false -> nil end end end)(_pipe@2).