-module(aion@activity).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/aion/activity.gleam").
-export([new/5, retry/2, timeout/2, heartbeat/2, name/1, input/1, input_codec/1, output_codec/1, runner/1, retry_policy/1, timeout_duration/1, heartbeat_interval/1]).
-export_type([backoff/0, retry_policy/0, activity/2]).
-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(" Typed activity values and policy configuration.\n").
-type backoff() :: {exponential,
aion@duration:duration(),
float(),
aion@duration:duration()} |
{linear,
aion@duration:duration(),
aion@duration:duration(),
aion@duration:duration()} |
{fixed, aion@duration:duration()}.
-type retry_policy() :: {retry_policy, integer(), backoff()}.
-opaque activity(DPB, DPC) :: {activity,
binary(),
DPB,
aion@codec:codec(DPB),
aion@codec:codec(DPC),
fun((DPB) -> {ok, DPC} | {error, aion@error:activity_error()}),
gleam@option:option(retry_policy()),
gleam@option:option(aion@duration:duration()),
gleam@option:option(aion@duration:duration())}.
-file("src/aion/activity.gleam", 64).
?DOC(
" Build a typed activity value with no retry, timeout, or heartbeat config.\n"
"\n"
" Absence of config is intentional data: there are no hidden defaults. In\n"
" particular, an activity with no `retry` decorator runs exactly once when it\n"
" is dispatched by the engine.\n"
).
-spec new(
binary(),
DPD,
aion@codec:codec(DPD),
aion@codec:codec(DPF),
fun((DPD) -> {ok, DPF} | {error, aion@error:activity_error()})
) -> activity(DPD, DPF).
new(Name, Input, Input_codec, Output_codec, Run) ->
{activity, Name, Input, Input_codec, Output_codec, Run, none, none, none}.
-file("src/aion/activity.gleam", 87).
?DOC(
" Attach an explicit retry policy to an activity.\n"
"\n"
" Later calls replace earlier retry policy values; the SDK does not merge or\n"
" synthesize policy fields.\n"
).
-spec retry(activity(DPL, DPM), retry_policy()) -> activity(DPL, DPM).
retry(Activity, Policy) ->
{activity,
erlang:element(2, Activity),
erlang:element(3, Activity),
erlang:element(4, Activity),
erlang:element(5, Activity),
erlang:element(6, Activity),
{some, Policy},
erlang:element(8, Activity),
erlang:element(9, Activity)}.
-file("src/aion/activity.gleam", 101).
?DOC(" Attach an explicit timeout duration to an activity.\n").
-spec timeout(activity(DPR, DPS), aion@duration:duration()) -> activity(DPR, DPS).
timeout(Activity, Timeout_duration) ->
{activity,
erlang:element(2, Activity),
erlang:element(3, Activity),
erlang:element(4, Activity),
erlang:element(5, Activity),
erlang:element(6, Activity),
erlang:element(7, Activity),
{some, Timeout_duration},
erlang:element(9, Activity)}.
-file("src/aion/activity.gleam", 118).
?DOC(" Attach an explicit heartbeat interval to an activity.\n").
-spec heartbeat(activity(DPX, DPY), aion@duration:duration()) -> activity(DPX, DPY).
heartbeat(Activity, Heartbeat_interval) ->
{activity,
erlang:element(2, Activity),
erlang:element(3, Activity),
erlang:element(4, Activity),
erlang:element(5, Activity),
erlang:element(6, Activity),
erlang:element(7, Activity),
erlang:element(8, Activity),
{some, Heartbeat_interval}}.
-file("src/aion/activity.gleam", 135).
?DOC(" Return the activity name used by the engine dispatch boundary.\n").
-spec name(activity(any(), any())) -> binary().
name(Activity) ->
erlang:element(2, Activity).
-file("src/aion/activity.gleam", 140).
?DOC(" Return the typed input captured by the activity value.\n").
-spec input(activity(DQH, any())) -> DQH.
input(Activity) ->
erlang:element(3, Activity).
-file("src/aion/activity.gleam", 145).
?DOC(" Return the typed input codec captured by the activity value.\n").
-spec input_codec(activity(DQL, any())) -> aion@codec:codec(DQL).
input_codec(Activity) ->
erlang:element(4, Activity).
-file("src/aion/activity.gleam", 150).
?DOC(" Return the typed output codec captured by the activity value.\n").
-spec output_codec(activity(any(), DQR)) -> aion@codec:codec(DQR).
output_codec(Activity) ->
erlang:element(5, Activity).
-file("src/aion/activity.gleam", 155).
?DOC(" Return the typed runner captured by the activity value.\n").
-spec runner(activity(DQV, DQW)) -> fun((DQV) -> {ok, DQW} |
{error, aion@error:activity_error()}).
runner(Activity) ->
erlang:element(6, Activity).
-file("src/aion/activity.gleam", 162).
?DOC(" Return the explicitly attached retry policy, if one exists.\n").
-spec retry_policy(activity(any(), any())) -> gleam@option:option(retry_policy()).
retry_policy(Activity) ->
erlang:element(7, Activity).
-file("src/aion/activity.gleam", 167).
?DOC(" Return the explicitly attached timeout duration, if one exists.\n").
-spec timeout_duration(activity(any(), any())) -> gleam@option:option(aion@duration:duration()).
timeout_duration(Activity) ->
erlang:element(8, Activity).
-file("src/aion/activity.gleam", 172).
?DOC(" Return the explicitly attached heartbeat interval, if one exists.\n").
-spec heartbeat_interval(activity(any(), any())) -> gleam@option:option(aion@duration:duration()).
heartbeat_interval(Activity) ->
erlang:element(9, Activity).