Skip to main content

src/aion@workflow.erl

-module(aion@workflow).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/aion/workflow.gleam").
-export([run/1, all/1, race/1, map/2, now/0, random/0, random_int/2, sleep/1, start_timer/2, cancel_timer/1, with_timeout/2, continue_as_new/2, 'receive'/1, timer_id/1, spawn/6, spawn_and_wait/6, timestamp_to_milliseconds/1, define/5, name/1, input_codec/1, output_codec/1, error_codec/1, entry_fn/1]).

-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(
    " Workflow authoring surface.\n"
    "\n"
    " This module is an aggregator only: it forwards declarations from the\n"
    " workflow submodules and contains no workflow business logic. `run` is the\n"
    " only recorded activity dispatch surface in this brief; deterministic time\n"
    " and random values come from AD through `aion/internal/ffi`.\n"
).

-file("src/aion/workflow.gleam", 35).
-spec run(aion@activity:activity(any(), FME)) -> {ok, FME} |
    {error, aion@error:activity_error()}.
run(Activity) ->
    aion@workflow@run:run(Activity).

-file("src/aion/workflow.gleam", 41).
-spec all(list(aion@activity:activity(any(), FMK))) -> {ok, list(FMK)} |
    {error, aion@error:activity_error()}.
all(Activities) ->
    aion@workflow@concurrency:all(Activities).

-file("src/aion/workflow.gleam", 47).
-spec race(list(aion@activity:activity(any(), FMS))) -> {ok, FMS} |
    {error, aion@error:activity_error()}.
race(Activities) ->
    aion@workflow@concurrency:race(Activities).

-file("src/aion/workflow.gleam", 53).
-spec map(list(FMY), fun((FMY) -> aion@activity:activity(any(), FNB))) -> {ok,
        list(FNB)} |
    {error, aion@error:activity_error()}.
map(Items, To_activity) ->
    aion@workflow@concurrency:map(Items, To_activity).

-file("src/aion/workflow.gleam", 60).
-spec now() -> {ok, aion@workflow@run:timestamp()} |
    {error, aion@error:engine_error()}.
now() ->
    aion@workflow@run:now().

-file("src/aion/workflow.gleam", 64).
-spec random() -> {ok, float()} | {error, aion@error:engine_error()}.
random() ->
    aion@workflow@run:random().

-file("src/aion/workflow.gleam", 68).
-spec random_int(integer(), integer()) -> {ok, integer()} |
    {error, aion@error:engine_error()}.
random_int(Min, Max) ->
    aion@workflow@run:random_int(Min, Max).

-file("src/aion/workflow.gleam", 72).
-spec sleep(aion@duration:duration()) -> {ok, nil} |
    {error, aion@error:engine_error()}.
sleep(Duration) ->
    aion@workflow@timer:sleep(Duration).

-file("src/aion/workflow.gleam", 76).
-spec start_timer(binary(), aion@duration:duration()) -> {ok,
        aion@workflow@timer:timer_ref()} |
    {error, aion@error:engine_error()}.
start_timer(Name, Duration) ->
    aion@workflow@timer:start_timer(Name, Duration).

-file("src/aion/workflow.gleam", 83).
-spec cancel_timer(aion@workflow@timer:timer_ref()) -> {ok, nil} |
    {error, aion@error:engine_error()}.
cancel_timer(Reference) ->
    aion@workflow@timer:cancel_timer(Reference).

-file("src/aion/workflow.gleam", 87).
-spec with_timeout(
    fun(() -> {ok, FNT} | {error, FNU}),
    aion@duration:duration()
) -> {ok, FNT} | {error, aion@error:timeout_result_error(FNU)}.
with_timeout(Operation, Deadline) ->
    aion@workflow@timer:with_timeout(Operation, Deadline).

-file("src/aion/workflow.gleam", 94).
-spec continue_as_new(FOA, aion@codec:codec(FOA)) -> {ok, nil} |
    {error, aion@error:workflow_error()}.
continue_as_new(Input, Input_codec) ->
    aion@workflow@continuation:continue_as_new(Input, Input_codec).

-file("src/aion/workflow.gleam", 101).
-spec 'receive'(aion@signal:signal_ref(FOE)) -> {ok, FOE} |
    {error, aion@error:receive_error()}.
'receive'(Reference) ->
    aion@signal:'receive'(Reference).

-file("src/aion/workflow.gleam", 107).
-spec timer_id(aion@workflow@timer:timer_ref()) -> binary().
timer_id(Reference) ->
    aion@workflow@timer:timer_id(Reference).

-file("src/aion/workflow.gleam", 111).
-spec spawn(
    binary(),
    fun((FOI) -> {ok, FOJ} | {error, FOK}),
    FOI,
    aion@codec:codec(FOI),
    aion@codec:codec(FOJ),
    aion@codec:codec(FOK)
) -> {ok, aion@child:child_handle(FOJ, FOK)} |
    {error, aion@error:engine_error()}.
spawn(Name, Workflow_fn, Input, Input_codec, Output_codec, Error_codec) ->
    aion@child:spawn(
        Name,
        Workflow_fn,
        Input,
        Input_codec,
        Output_codec,
        Error_codec
    ).

-file("src/aion/workflow.gleam", 122).
-spec spawn_and_wait(
    binary(),
    fun((FOU) -> {ok, FOV} | {error, FOW}),
    FOU,
    aion@codec:codec(FOU),
    aion@codec:codec(FOV),
    aion@codec:codec(FOW)
) -> {ok, FOV} | {error, aion@error:child_error(FOW)}.
spawn_and_wait(Name, Workflow_fn, Input, Input_codec, Output_codec, Error_codec) ->
    aion@child:spawn_and_wait(
        Name,
        Workflow_fn,
        Input,
        Input_codec,
        Output_codec,
        Error_codec
    ).

-file("src/aion/workflow.gleam", 140).
-spec timestamp_to_milliseconds(aion@workflow@run:timestamp()) -> integer().
timestamp_to_milliseconds(Timestamp) ->
    aion@workflow@run:timestamp_to_milliseconds(Timestamp).

-file("src/aion/workflow.gleam", 144).
-spec define(
    binary(),
    aion@codec:codec(FPF),
    aion@codec:codec(FPH),
    aion@codec:codec(FPJ),
    fun((FPF) -> {ok, FPH} | {error, FPJ})
) -> aion@workflow@define:workflow_definition(FPF, FPH, FPJ).
define(Name, Input_codec, Output_codec, Error_codec, Entry_fn) ->
    aion@workflow@define:define(
        Name,
        Input_codec,
        Output_codec,
        Error_codec,
        Entry_fn
    ).

-file("src/aion/workflow.gleam", 154).
-spec name(aion@workflow@define:workflow_definition(any(), any(), any())) -> binary().
name(Definition) ->
    aion@workflow@define:name(Definition).

-file("src/aion/workflow.gleam", 160).
-spec input_codec(aion@workflow@define:workflow_definition(FPW, any(), any())) -> aion@codec:codec(FPW).
input_codec(Definition) ->
    aion@workflow@define:input_codec(Definition).

-file("src/aion/workflow.gleam", 166).
-spec output_codec(aion@workflow@define:workflow_definition(any(), FQE, any())) -> aion@codec:codec(FQE).
output_codec(Definition) ->
    aion@workflow@define:output_codec(Definition).

-file("src/aion/workflow.gleam", 172).
-spec error_codec(aion@workflow@define:workflow_definition(any(), any(), FQM)) -> aion@codec:codec(FQM).
error_codec(Definition) ->
    aion@workflow@define:error_codec(Definition).

-file("src/aion/workflow.gleam", 178).
-spec entry_fn(aion@workflow@define:workflow_definition(FQR, FQS, FQT)) -> fun((FQR) -> {ok,
        FQS} |
    {error, FQT}).
entry_fn(Definition) ->
    aion@workflow@define:entry_fn(Definition).