Current section

Files

Jump to
telega src telega@flow@action.erl
Raw

src/telega@flow@action.erl

-module(telega@flow@action).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/telega/flow/action.gleam").
-export([next/3, unsafe_next/3, goto/3, back/2, complete/2, cancel/2, wait/2, wait_callback/2, wait_with_timeout/3, wait_callback_with_timeout/3, exit/3, enter_subflow/4, return_from_subflow/3, 'try'/4, try_with_message/5]).
-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(" Pure control functions that construct `FlowAction` values.\n").
-file("src/telega/flow/action.gleam", 14).
?DOC(" Next navigation\n").
-spec next(
telega@bot:context(BHSB, BHSC, BHSD),
telega@flow@types:flow_instance(),
BHSH
) -> {ok,
{telega@bot:context(BHSB, BHSC, BHSD),
telega@flow@types:flow_action(BHSH),
telega@flow@types:flow_instance()}} |
{error, BHSC}.
next(Ctx, Instance, Step) ->
{ok, {Ctx, {next, Step}, Instance}}.
-file("src/telega/flow/action.gleam", 23).
?DOC(" Next navigation with string step (for dynamic navigation)\n").
-spec unsafe_next(
telega@bot:context(BHSM, BHSN, BHSO),
telega@flow@types:flow_instance(),
binary()
) -> {ok,
{telega@bot:context(BHSM, BHSN, BHSO),
telega@flow@types:flow_action(any()),
telega@flow@types:flow_instance()}} |
{error, BHSN}.
unsafe_next(Ctx, Instance, Step) ->
{ok, {Ctx, {next_string, Step}, Instance}}.
-file("src/telega/flow/action.gleam", 32).
?DOC(" Type-safe goto navigation (clears step data)\n").
-spec goto(
telega@bot:context(BHSX, BHSY, BHSZ),
telega@flow@types:flow_instance(),
BHTD
) -> {ok,
{telega@bot:context(BHSX, BHSY, BHSZ),
telega@flow@types:flow_action(BHTD),
telega@flow@types:flow_instance()}} |
{error, BHSY}.
goto(Ctx, Instance, Step) ->
{ok, {Ctx, {go_to, Step}, Instance}}.
-file("src/telega/flow/action.gleam", 41).
?DOC(" Go back to previous step\n").
-spec back(
telega@bot:context(BHTI, BHTJ, BHTK),
telega@flow@types:flow_instance()
) -> {ok,
{telega@bot:context(BHTI, BHTJ, BHTK),
telega@flow@types:flow_action(any()),
telega@flow@types:flow_instance()}} |
{error, BHTJ}.
back(Ctx, Instance) ->
{ok, {Ctx, back, Instance}}.
-file("src/telega/flow/action.gleam", 49).
?DOC(" Complete the flow\n").
-spec complete(
telega@bot:context(BHTT, BHTU, BHTV),
telega@flow@types:flow_instance()
) -> {ok,
{telega@bot:context(BHTT, BHTU, BHTV),
telega@flow@types:flow_action(any()),
telega@flow@types:flow_instance()}} |
{error, BHTU}.
complete(Ctx, Instance) ->
{ok,
{Ctx,
{complete, erlang:element(3, erlang:element(6, Instance))},
Instance}}.
-file("src/telega/flow/action.gleam", 57).
?DOC(" Cancel the flow\n").
-spec cancel(
telega@bot:context(BHUE, BHUF, BHUG),
telega@flow@types:flow_instance()
) -> {ok,
{telega@bot:context(BHUE, BHUF, BHUG),
telega@flow@types:flow_action(any()),
telega@flow@types:flow_instance()}} |
{error, BHUF}.
cancel(Ctx, Instance) ->
{ok, {Ctx, cancel, Instance}}.
-file("src/telega/flow/action.gleam", 65).
?DOC(" Wait for user input\n").
-spec wait(
telega@bot:context(BHUP, BHUQ, BHUR),
telega@flow@types:flow_instance()
) -> {ok,
{telega@bot:context(BHUP, BHUQ, BHUR),
telega@flow@types:flow_action(any()),
telega@flow@types:flow_instance()}} |
{error, BHUQ}.
wait(Ctx, Instance) ->
{ok, {Ctx, wait, Instance}}.
-file("src/telega/flow/action.gleam", 73).
?DOC(" Wait for callback\n").
-spec wait_callback(
telega@bot:context(BHVA, BHVB, BHVC),
telega@flow@types:flow_instance()
) -> {ok,
{telega@bot:context(BHVA, BHVB, BHVC),
telega@flow@types:flow_action(any()),
telega@flow@types:flow_instance()}} |
{error, BHVB}.
wait_callback(Ctx, Instance) ->
{ok, {Ctx, wait_callback, Instance}}.
-file("src/telega/flow/action.gleam", 81).
?DOC(" Wait for user input with timeout\n").
-spec wait_with_timeout(
telega@bot:context(BHVL, BHVM, BHVN),
telega@flow@types:flow_instance(),
integer()
) -> {ok,
{telega@bot:context(BHVL, BHVM, BHVN),
telega@flow@types:flow_action(any()),
telega@flow@types:flow_instance()}} |
{error, BHVM}.
wait_with_timeout(Ctx, Instance, Timeout_ms) ->
{ok, {Ctx, {wait_with_timeout, Timeout_ms}, Instance}}.
-file("src/telega/flow/action.gleam", 90).
?DOC(" Wait for callback with timeout\n").
-spec wait_callback_with_timeout(
telega@bot:context(BHVW, BHVX, BHVY),
telega@flow@types:flow_instance(),
integer()
) -> {ok,
{telega@bot:context(BHVW, BHVX, BHVY),
telega@flow@types:flow_action(any()),
telega@flow@types:flow_instance()}} |
{error, BHVX}.
wait_callback_with_timeout(Ctx, Instance, Timeout_ms) ->
{ok, {Ctx, {wait_callback_with_timeout, Timeout_ms}, Instance}}.
-file("src/telega/flow/action.gleam", 99).
?DOC(" Exit with result\n").
-spec exit(
telega@bot:context(BHWH, BHWI, BHWJ),
telega@flow@types:flow_instance(),
gleam@option:option(gleam@dict:dict(binary(), binary()))
) -> {ok,
{telega@bot:context(BHWH, BHWI, BHWJ),
telega@flow@types:flow_action(any()),
telega@flow@types:flow_instance()}} |
{error, BHWI}.
exit(Ctx, Instance, Result) ->
{ok, {Ctx, {exit, Result}, Instance}}.
-file("src/telega/flow/action.gleam", 112).
?DOC(
" Enter a subflow by name\n"
"\n"
" This pushes the current flow state onto the stack and starts the subflow.\n"
" When the subflow completes with `return_from_subflow`, execution returns\n"
" to the parent flow at the step specified in `add_subflow`.\n"
).
-spec enter_subflow(
telega@bot:context(BHWV, BHWW, BHWX),
telega@flow@types:flow_instance(),
binary(),
gleam@dict:dict(binary(), binary())
) -> {ok,
{telega@bot:context(BHWV, BHWW, BHWX),
telega@flow@types:flow_action(any()),
telega@flow@types:flow_instance()}} |
{error, BHWW}.
enter_subflow(Ctx, Instance, Subflow_name, Data) ->
{ok, {Ctx, {enter_subflow, Subflow_name, Data}, Instance}}.
-file("src/telega/flow/action.gleam", 125).
?DOC(
" Return from a subflow with result data\n"
"\n"
" This pops the parent flow from the stack and merges the result data\n"
" into the parent's state, then continues at the return step.\n"
).
-spec return_from_subflow(
telega@bot:context(BHXI, BHXJ, BHXK),
telega@flow@types:flow_instance(),
gleam@dict:dict(binary(), binary())
) -> {ok,
{telega@bot:context(BHXI, BHXJ, BHXK),
telega@flow@types:flow_action(any()),
telega@flow@types:flow_instance()}} |
{error, BHXJ}.
return_from_subflow(Ctx, Instance, Result) ->
{ok, {Ctx, {return_from_subflow, Result}, Instance}}.
-file("src/telega/flow/action.gleam", 142).
?DOC(
" Try a result, cancelling the flow on error.\n"
"\n"
" Designed for `use` syntax to flatten nested error handling in flow steps:\n"
"\n"
" ```gleam\n"
" use _ <- action.try(ctx, instance, reply.with_text(ctx, \"Hello!\"))\n"
" use data <- action.try(ctx, instance, fetch_data())\n"
" action.complete(ctx, instance)\n"
" ```\n"
).
-spec 'try'(
telega@bot:context(BHXV, BHXW, BHXX),
telega@flow@types:flow_instance(),
{ok, BHYB} | {error, any()},
fun((BHYB) -> {ok,
{telega@bot:context(BHXV, BHXW, BHXX),
telega@flow@types:flow_action(BHYF),
telega@flow@types:flow_instance()}} |
{error, BHXW})
) -> {ok,
{telega@bot:context(BHXV, BHXW, BHXX),
telega@flow@types:flow_action(BHYF),
telega@flow@types:flow_instance()}} |
{error, BHXW}.
'try'(Ctx, Instance, Result, Continue) ->
case Result of
{ok, Value} ->
Continue(Value);
{error, _} ->
cancel(Ctx, Instance)
end.
-file("src/telega/flow/action.gleam", 166).
?DOC(
" Try a result, sending an error message and cancelling the flow on error.\n"
"\n"
" The `to_message` function converts the error into a user-facing message\n"
" that is sent via `reply.with_text` before cancelling.\n"
"\n"
" ```gleam\n"
" use data <- action.try_with_message(ctx, instance,\n"
" extract_data(instance),\n"
" fn(err) { \"❌ Error: \" <> err },\n"
" )\n"
" action.complete(ctx, instance)\n"
" ```\n"
).
-spec try_with_message(
telega@bot:context(BHYO, BHYP, BHYQ),
telega@flow@types:flow_instance(),
{ok, BHYU} | {error, BHYV},
fun((BHYV) -> binary()),
fun((BHYU) -> {ok,
{telega@bot:context(BHYO, BHYP, BHYQ),
telega@flow@types:flow_action(BHYY),
telega@flow@types:flow_instance()}} |
{error, BHYP})
) -> {ok,
{telega@bot:context(BHYO, BHYP, BHYQ),
telega@flow@types:flow_action(BHYY),
telega@flow@types:flow_instance()}} |
{error, BHYP}.
try_with_message(Ctx, Instance, Result, To_message, Continue) ->
case Result of
{ok, Value} ->
Continue(Value);
{error, Err} ->
_ = telega@reply:with_text(Ctx, To_message(Err)),
cancel(Ctx, Instance)
end.