Packages

A Gleam SDK for the Absurd durable workflow system, with type-safe database access via Parrot and OTP worker actors

Current section

Files

Jump to
gabsurd src gabsurd@event.erl
Raw

src/gabsurd@event.erl

-module(gabsurd@event).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/gabsurd/event.gleam").
-export([emit/4, await/7]).
-export_type([await_result/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.
?MODULEDOC(
" Event operations for the Absurd durable workflow system.\n"
" Provides functions for emitting and awaiting events.\n"
).
-type await_result() :: {await_result, boolean(), binary()}.
-file("src/gabsurd/event.gleam", 15).
?DOC(" Emit an event to a queue.\n").
-spec emit(gabsurd@client:db(), binary(), binary(), gleam@json:json()) -> {ok,
nil} |
{error, gabsurd@client:gabsurd_error()}.
emit(Db, Queue_name, Event_name, Payload) ->
gabsurd@client:exec(
Db,
gabsurd@sql:emit_event(
Queue_name,
Event_name,
gleam@json:to_string(Payload)
)
).
-file("src/gabsurd/event.gleam", 30).
?DOC(
" Await an event for a specific task step.\n"
" Returns an AwaitResult indicating whether the task should suspend\n"
" (no event available) or continue (event received).\n"
).
-spec await(
gabsurd@client:db(),
binary(),
bitstring(),
bitstring(),
binary(),
binary(),
integer()
) -> {ok, await_result()} | {error, gabsurd@client:gabsurd_error()}.
await(Db, Queue_name, Task_id, Run_id, Step_name, Event_name, Timeout) ->
gleam@result:'try'(
gabsurd@client:query_one(
Db,
gabsurd@sql:await_event(
Queue_name,
Task_id,
Run_id,
Step_name,
Event_name,
Timeout
)
),
fun(Row) ->
{ok, {await_result, erlang:element(2, Row), erlang:element(3, Row)}}
end
).