Current section
Files
Jump to
Current section
Files
src/telega@flow@builder.erl
-module(telega@flow@builder).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/telega/flow/builder.gleam").
-export([new/4, new_with_default_converters/3, add_step/3, add_step_with_middleware/4, add_step_with_hooks/5, add_step_with_hooks_and_middleware/6, add_global_middleware/2, add_conditional/5, add_multi_conditional/4, add_parallel_steps/4, parallel/4, add_subflow/6, build/2, with_inline_subflow/6, with_inline_subflow_mapped/8, inline_next/3, on_complete/2, on_error/2, set_on_flow_enter/2, set_on_flow_leave/2, with_ttl/2, on_timeout/2, set_on_flow_exit/2]).
-export_type([flow_builder/4]).
-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(" FlowBuilder and all builder functions for constructing flows.\n").
-opaque flow_builder(ASDT, ASDU, ASDV, ASDW) :: {flow_builder,
binary(),
gleam@dict:dict(binary(), telega@flow@types:step_config(ASDT, ASDU, ASDV, ASDW)),
fun((ASDT) -> binary()),
fun((binary()) -> {ok, ASDT} | {error, nil}),
telega@flow@types:flow_storage(ASDV),
gleam@option:option(fun((telega@bot:context(ASDU, ASDV, ASDW), telega@flow@types:flow_instance()) -> {ok,
telega@bot:context(ASDU, ASDV, ASDW)} |
{error, ASDV})),
gleam@option:option(fun((telega@bot:context(ASDU, ASDV, ASDW), telega@flow@types:flow_instance(), gleam@option:option(ASDV)) -> {ok,
telega@bot:context(ASDU, ASDV, ASDW)} |
{error, ASDV})),
list(fun((telega@bot:context(ASDU, ASDV, ASDW), telega@flow@types:flow_instance(), fun(() -> {ok,
{telega@bot:context(ASDU, ASDV, ASDW),
telega@flow@types:flow_action(ASDT),
telega@flow@types:flow_instance()}} |
{error, ASDV})) -> {ok,
{telega@bot:context(ASDU, ASDV, ASDW),
telega@flow@types:flow_action(ASDT),
telega@flow@types:flow_instance()}} |
{error, ASDV})),
list(telega@flow@types:conditional_transition(ASDT)),
list(telega@flow@types:parallel_config(ASDT)),
list(telega@flow@types:subflow_config(ASDT, ASDU, ASDV, ASDW)),
gleam@option:option(fun((telega@bot:context(ASDU, ASDV, ASDW), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(ASDU, ASDV, ASDW),
telega@flow@types:flow_instance()}} |
{error, ASDV})),
gleam@option:option(fun((telega@bot:context(ASDU, ASDV, ASDW), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(ASDU, ASDV, ASDW),
telega@flow@types:flow_instance()}} |
{error, ASDV})),
gleam@option:option(fun((telega@bot:context(ASDU, ASDV, ASDW), telega@flow@types:flow_instance()) -> {ok,
telega@bot:context(ASDU, ASDV, ASDW)} |
{error, ASDV})),
gleam@option:option(integer()),
gleam@option:option(fun((telega@bot:context(ASDU, ASDV, ASDW), telega@flow@types:flow_instance()) -> {ok,
telega@bot:context(ASDU, ASDV, ASDW)} |
{error, ASDV}))}.
-file("src/telega/flow/builder.gleam", 51).
?DOC(" Create a new flow builder\n").
-spec new(
binary(),
telega@flow@types:flow_storage(ASDX),
fun((ASDZ) -> binary()),
fun((binary()) -> {ok, ASDZ} | {error, nil})
) -> flow_builder(ASDZ, any(), ASDX, any()).
new(Flow_name, Storage, Step_to_string, String_to_step) ->
{flow_builder,
Flow_name,
maps:new(),
Step_to_string,
String_to_step,
Storage,
none,
none,
[],
[],
[],
[],
none,
none,
none,
none,
none}.
-file("src/telega/flow/builder.gleam", 459).
?DOC(" Helper to create a string_to_step function for a list of steps\n").
-spec create_string_to_step(list({binary(), ASSM})) -> fun((binary()) -> {ok,
ASSM} |
{error, nil}).
create_string_to_step(Steps) ->
Step_dict = maps:from_list(Steps),
fun(Name) -> gleam_stdlib:map_get(Step_dict, Name) end.
-file("src/telega/flow/builder.gleam", 78).
?DOC(" Create a flow builder with default string conversion (uses string.inspect)\n").
-spec new_with_default_converters(
binary(),
telega@flow@types:flow_storage(ASEI),
list({binary(), ASEK})
) -> flow_builder(ASEK, any(), ASEI, any()).
new_with_default_converters(Flow_name, Storage, Steps) ->
{flow_builder,
Flow_name,
maps:new(),
fun gleam@string:inspect/1,
create_string_to_step(Steps),
Storage,
none,
none,
[],
[],
[],
[],
none,
none,
none,
none,
none}.
-file("src/telega/flow/builder.gleam", 104).
?DOC(" Add a step to the flow\n").
-spec add_step(
flow_builder(ASES, ASET, ASEU, ASEV),
ASES,
fun((telega@bot:context(ASET, ASEU, ASEV), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(ASET, ASEU, ASEV),
telega@flow@types:flow_action(ASES),
telega@flow@types:flow_instance()}} |
{error, ASEU})
) -> flow_builder(ASES, ASET, ASEU, ASEV).
add_step(Builder, Step, Handler) ->
Step_name = (erlang:element(4, Builder))(Step),
Config = {step_config, Handler, [], none, none},
{flow_builder,
erlang:element(2, Builder),
gleam@dict:insert(erlang:element(3, Builder), Step_name, Config),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder),
erlang:element(16, Builder),
erlang:element(17, Builder)}.
-file("src/telega/flow/builder.gleam", 116).
?DOC(" Add a step with middleware\n").
-spec add_step_with_middleware(
flow_builder(ASFI, ASFJ, ASFK, ASFL),
ASFI,
list(fun((telega@bot:context(ASFJ, ASFK, ASFL), telega@flow@types:flow_instance(), fun(() -> {ok,
{telega@bot:context(ASFJ, ASFK, ASFL),
telega@flow@types:flow_action(ASFI),
telega@flow@types:flow_instance()}} |
{error, ASFK})) -> {ok,
{telega@bot:context(ASFJ, ASFK, ASFL),
telega@flow@types:flow_action(ASFI),
telega@flow@types:flow_instance()}} |
{error, ASFK})),
fun((telega@bot:context(ASFJ, ASFK, ASFL), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(ASFJ, ASFK, ASFL),
telega@flow@types:flow_action(ASFI),
telega@flow@types:flow_instance()}} |
{error, ASFK})
) -> flow_builder(ASFI, ASFJ, ASFK, ASFL).
add_step_with_middleware(Builder, Step, Middlewares, Handler) ->
Step_name = (erlang:element(4, Builder))(Step),
Config = {step_config, Handler, Middlewares, none, none},
{flow_builder,
erlang:element(2, Builder),
gleam@dict:insert(erlang:element(3, Builder), Step_name, Config),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder),
erlang:element(16, Builder),
erlang:element(17, Builder)}.
-file("src/telega/flow/builder.gleam", 129).
?DOC(" Add a step with lifecycle hooks\n").
-spec add_step_with_hooks(
flow_builder(ASGD, ASGE, ASGF, ASGG),
ASGD,
fun((telega@bot:context(ASGE, ASGF, ASGG), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(ASGE, ASGF, ASGG),
telega@flow@types:flow_action(ASGD),
telega@flow@types:flow_instance()}} |
{error, ASGF}),
gleam@option:option(fun((telega@bot:context(ASGE, ASGF, ASGG), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(ASGE, ASGF, ASGG),
telega@flow@types:flow_instance()}} |
{error, ASGF})),
gleam@option:option(fun((telega@bot:context(ASGE, ASGF, ASGG), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(ASGE, ASGF, ASGG),
telega@flow@types:flow_instance()}} |
{error, ASGF}))
) -> flow_builder(ASGD, ASGE, ASGF, ASGG).
add_step_with_hooks(Builder, Step, Handler, On_enter, On_leave) ->
Step_name = (erlang:element(4, Builder))(Step),
Config = {step_config, Handler, [], On_enter, On_leave},
{flow_builder,
erlang:element(2, Builder),
gleam@dict:insert(erlang:element(3, Builder), Step_name, Config),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder),
erlang:element(16, Builder),
erlang:element(17, Builder)}.
-file("src/telega/flow/builder.gleam", 142).
?DOC(" Add a step with hooks and middleware\n").
-spec add_step_with_hooks_and_middleware(
flow_builder(ASHB, ASHC, ASHD, ASHE),
ASHB,
fun((telega@bot:context(ASHC, ASHD, ASHE), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(ASHC, ASHD, ASHE),
telega@flow@types:flow_action(ASHB),
telega@flow@types:flow_instance()}} |
{error, ASHD}),
list(fun((telega@bot:context(ASHC, ASHD, ASHE), telega@flow@types:flow_instance(), fun(() -> {ok,
{telega@bot:context(ASHC, ASHD, ASHE),
telega@flow@types:flow_action(ASHB),
telega@flow@types:flow_instance()}} |
{error, ASHD})) -> {ok,
{telega@bot:context(ASHC, ASHD, ASHE),
telega@flow@types:flow_action(ASHB),
telega@flow@types:flow_instance()}} |
{error, ASHD})),
gleam@option:option(fun((telega@bot:context(ASHC, ASHD, ASHE), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(ASHC, ASHD, ASHE),
telega@flow@types:flow_instance()}} |
{error, ASHD})),
gleam@option:option(fun((telega@bot:context(ASHC, ASHD, ASHE), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(ASHC, ASHD, ASHE),
telega@flow@types:flow_instance()}} |
{error, ASHD}))
) -> flow_builder(ASHB, ASHC, ASHD, ASHE).
add_step_with_hooks_and_middleware(
Builder,
Step,
Handler,
Middlewares,
On_enter,
On_leave
) ->
Step_name = (erlang:element(4, Builder))(Step),
Config = {step_config, Handler, Middlewares, On_enter, On_leave},
{flow_builder,
erlang:element(2, Builder),
gleam@dict:insert(erlang:element(3, Builder), Step_name, Config),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder),
erlang:element(16, Builder),
erlang:element(17, Builder)}.
-file("src/telega/flow/builder.gleam", 158).
?DOC(" Add global middleware that applies to all steps\n").
-spec add_global_middleware(
flow_builder(ASIE, ASIF, ASIG, ASIH),
fun((telega@bot:context(ASIF, ASIG, ASIH), telega@flow@types:flow_instance(), fun(() -> {ok,
{telega@bot:context(ASIF, ASIG, ASIH),
telega@flow@types:flow_action(ASIE),
telega@flow@types:flow_instance()}} |
{error, ASIG})) -> {ok,
{telega@bot:context(ASIF, ASIG, ASIH),
telega@flow@types:flow_action(ASIE),
telega@flow@types:flow_instance()}} |
{error, ASIG})
) -> flow_builder(ASIE, ASIF, ASIG, ASIH).
add_global_middleware(Builder, Middleware) ->
{flow_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
lists:append(erlang:element(9, Builder), [Middleware]),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder),
erlang:element(16, Builder),
erlang:element(17, Builder)}.
-file("src/telega/flow/builder.gleam", 169).
?DOC(" Add conditional transition\n").
-spec add_conditional(
flow_builder(ASIU, ASIV, ASIW, ASIX),
ASIU,
fun((telega@flow@types:flow_instance()) -> boolean()),
ASIU,
ASIU
) -> flow_builder(ASIU, ASIV, ASIW, ASIX).
add_conditional(Builder, From, Condition, On_true, On_false) ->
From_str = (erlang:element(4, Builder))(From),
Conditional = {conditional_transition,
From_str,
[{Condition, On_true}],
On_false},
{flow_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
lists:append(erlang:element(10, Builder), [Conditional]),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder),
erlang:element(16, Builder),
erlang:element(17, Builder)}.
-file("src/telega/flow/builder.gleam", 190).
?DOC(" Add multi-way conditional\n").
-spec add_multi_conditional(
flow_builder(ASJG, ASJH, ASJI, ASJJ),
ASJG,
list({fun((telega@flow@types:flow_instance()) -> boolean()), ASJG}),
ASJG
) -> flow_builder(ASJG, ASJH, ASJI, ASJJ).
add_multi_conditional(Builder, From, Conditions, Default) ->
From_str = (erlang:element(4, Builder))(From),
Conditional = {conditional_transition, From_str, Conditions, Default},
{flow_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
lists:append(erlang:element(10, Builder), [Conditional]),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder),
erlang:element(16, Builder),
erlang:element(17, Builder)}.
-file("src/telega/flow/builder.gleam", 217).
?DOC(
" Add parallel step execution.\n"
"\n"
" @deprecated Use `parallel()` instead for cleaner API.\n"
).
-spec add_parallel_steps(
flow_builder(ASKG, ASKH, ASKI, ASKJ),
ASKG,
list(ASKG),
ASKG
) -> flow_builder(ASKG, ASKH, ASKI, ASKJ).
add_parallel_steps(Builder, Trigger_step, Parallel_steps, Join_at) ->
Trigger_str = (erlang:element(4, Builder))(Trigger_step),
Config = {parallel_config, Trigger_str, Parallel_steps, Join_at},
{flow_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
lists:append(erlang:element(11, Builder), [Config]),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder),
erlang:element(16, Builder),
erlang:element(17, Builder)}.
-file("src/telega/flow/builder.gleam", 205).
?DOC(" Add parallel step execution (simplified API).\n").
-spec parallel(flow_builder(ASJT, ASJU, ASJV, ASJW), ASJT, list(ASJT), ASJT) -> flow_builder(ASJT, ASJU, ASJV, ASJW).
parallel(Builder, From, Steps, Join) ->
add_parallel_steps(Builder, From, Steps, Join).
-file("src/telega/flow/builder.gleam", 237).
?DOC(" Add sub-flow\n").
-spec add_subflow(
flow_builder(ASKT, ASKU, ASKV, ASKW),
ASKT,
telega@flow@types:flow(gleam@dynamic:dynamic_(), ASKU, ASKV, ASKW),
ASKT,
fun((telega@flow@types:flow_instance()) -> gleam@dict:dict(binary(), binary())),
fun((gleam@dict:dict(binary(), binary()), telega@flow@types:flow_instance()) -> telega@flow@types:flow_instance())
) -> flow_builder(ASKT, ASKU, ASKV, ASKW).
add_subflow(Builder, Trigger_step, Subflow, Return_to, Map_args, Map_result) ->
Trigger_str = (erlang:element(4, Builder))(Trigger_step),
Config = {subflow_config,
Trigger_str,
Subflow,
Return_to,
Map_args,
Map_result},
{flow_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
lists:append(erlang:element(12, Builder), [Config]),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder),
erlang:element(16, Builder),
erlang:element(17, Builder)}.
-file("src/telega/flow/builder.gleam", 468).
-spec unsafe_coerce(any()) -> any().
unsafe_coerce(Value) ->
telega@internal@coerce:unsafe_coerce(Value).
-file("src/telega/flow/builder.gleam", 425).
?DOC(" Build the flow\n").
-spec build(flow_builder(ASRY, ASRZ, ASSA, ASSB), ASRY) -> telega@flow@types:flow(ASRY, ASRZ, ASSA, ASSB).
build(Builder, Initial_step) ->
{flow,
erlang:element(2, Builder),
erlang:element(3, Builder),
Initial_step,
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder),
erlang:element(16, Builder),
erlang:element(17, Builder)}.
-file("src/telega/flow/builder.gleam", 454).
-spec string_to_inline_step(binary()) -> {ok, telega@flow@types:inline_step()} |
{error, nil}.
string_to_inline_step(S) ->
{ok, {inline_step, S}}.
-file("src/telega/flow/builder.gleam", 450).
-spec inline_step_to_string(telega@flow@types:inline_step()) -> binary().
inline_step_to_string(Step) ->
erlang:element(2, Step).
-file("src/telega/flow/builder.gleam", 259).
?DOC(" Add an inline subflow defined within the parent flow\n").
-spec with_inline_subflow(
flow_builder(ASLN, ASLO, ASLP, ASLQ),
binary(),
ASLN,
ASLN,
binary(),
list({binary(),
fun((telega@bot:context(ASLO, ASLP, ASLQ), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(ASLO, ASLP, ASLQ),
telega@flow@types:flow_action(telega@flow@types:inline_step()),
telega@flow@types:flow_instance()}} |
{error, ASLP})})
) -> flow_builder(ASLN, ASLO, ASLP, ASLQ).
with_inline_subflow(Builder, Name, Trigger, Return_to, Initial, Steps) ->
Inline_flow_name = <<<<(erlang:element(2, Builder))/binary, "::"/utf8>>/binary,
Name/binary>>,
Inline_storage = erlang:element(6, Builder),
Inline_builder = new(
Inline_flow_name,
Inline_storage,
fun inline_step_to_string/1,
fun string_to_inline_step/1
),
Inline_builder@1 = gleam@list:fold(
Steps,
Inline_builder,
fun(B, Step_tuple) ->
{Step_name, Handler} = Step_tuple,
add_step(B, {inline_step, Step_name}, Handler)
end
),
Inline_flow = build(Inline_builder@1, {inline_step, Initial}),
Coerced_flow = unsafe_coerce(Inline_flow),
add_subflow(
Builder,
Trigger,
Coerced_flow,
Return_to,
fun(Instance) -> erlang:element(3, erlang:element(6, Instance)) end,
fun(Result, Instance@1) ->
{flow_instance,
erlang:element(2, Instance@1),
erlang:element(3, Instance@1),
erlang:element(4, Instance@1),
erlang:element(5, Instance@1),
begin
_record = erlang:element(6, Instance@1),
{flow_state,
erlang:element(2, _record),
maps:merge(
erlang:element(3, erlang:element(6, Instance@1)),
Result
),
erlang:element(4, _record),
erlang:element(5, _record),
erlang:element(6, _record)}
end,
erlang:element(7, Instance@1),
erlang:element(8, Instance@1),
erlang:element(9, Instance@1),
erlang:element(10, Instance@1),
erlang:element(11, Instance@1)}
end
).
-file("src/telega/flow/builder.gleam", 313).
?DOC(" Add an inline subflow with custom argument and result mapping\n").
-spec with_inline_subflow_mapped(
flow_builder(ASMH, ASMI, ASMJ, ASMK),
binary(),
ASMH,
ASMH,
binary(),
list({binary(),
fun((telega@bot:context(ASMI, ASMJ, ASMK), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(ASMI, ASMJ, ASMK),
telega@flow@types:flow_action(telega@flow@types:inline_step()),
telega@flow@types:flow_instance()}} |
{error, ASMJ})}),
fun((telega@flow@types:flow_instance()) -> gleam@dict:dict(binary(), binary())),
fun((gleam@dict:dict(binary(), binary()), telega@flow@types:flow_instance()) -> telega@flow@types:flow_instance())
) -> flow_builder(ASMH, ASMI, ASMJ, ASMK).
with_inline_subflow_mapped(
Builder,
Name,
Trigger,
Return_to,
Initial,
Steps,
Map_args,
Map_result
) ->
Inline_flow_name = <<<<(erlang:element(2, Builder))/binary, "::"/utf8>>/binary,
Name/binary>>,
Inline_storage = erlang:element(6, Builder),
Inline_builder = new(
Inline_flow_name,
Inline_storage,
fun inline_step_to_string/1,
fun string_to_inline_step/1
),
Inline_builder@1 = gleam@list:fold(
Steps,
Inline_builder,
fun(B, Step_tuple) ->
{Step_name, Handler} = Step_tuple,
add_step(B, {inline_step, Step_name}, Handler)
end
),
Inline_flow = build(Inline_builder@1, {inline_step, Initial}),
Coerced_flow = unsafe_coerce(Inline_flow),
add_subflow(Builder, Trigger, Coerced_flow, Return_to, Map_args, Map_result).
-file("src/telega/flow/builder.gleam", 355).
?DOC(" Navigate to next inline step by name\n").
-spec inline_next(
telega@bot:context(ASNF, ASNG, ASNH),
telega@flow@types:flow_instance(),
binary()
) -> {ok,
{telega@bot:context(ASNF, ASNG, ASNH),
telega@flow@types:flow_action(telega@flow@types:inline_step()),
telega@flow@types:flow_instance()}} |
{error, ASNG}.
inline_next(Ctx, Instance, Step_name) ->
{ok, {Ctx, {next, {inline_step, Step_name}}, Instance}}.
-file("src/telega/flow/builder.gleam", 364).
?DOC(" Set completion handler\n").
-spec on_complete(
flow_builder(ASNP, ASNQ, ASNR, ASNS),
fun((telega@bot:context(ASNQ, ASNR, ASNS), telega@flow@types:flow_instance()) -> {ok,
telega@bot:context(ASNQ, ASNR, ASNS)} |
{error, ASNR})
) -> flow_builder(ASNP, ASNQ, ASNR, ASNS).
on_complete(Builder, Handler) ->
{flow_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
{some, Handler},
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder),
erlang:element(16, Builder),
erlang:element(17, Builder)}.
-file("src/telega/flow/builder.gleam", 373).
?DOC(" Set error handler\n").
-spec on_error(
flow_builder(ASOJ, ASOK, ASOL, ASOM),
fun((telega@bot:context(ASOK, ASOL, ASOM), telega@flow@types:flow_instance(), gleam@option:option(ASOL)) -> {ok,
telega@bot:context(ASOK, ASOL, ASOM)} |
{error, ASOL})
) -> flow_builder(ASOJ, ASOK, ASOL, ASOM).
on_error(Builder, Handler) ->
{flow_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
{some, Handler},
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder),
erlang:element(16, Builder),
erlang:element(17, Builder)}.
-file("src/telega/flow/builder.gleam", 385).
?DOC(" Set flow enter hook\n").
-spec set_on_flow_enter(
flow_builder(ASPE, ASPF, ASPG, ASPH),
fun((telega@bot:context(ASPF, ASPG, ASPH), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(ASPF, ASPG, ASPH),
telega@flow@types:flow_instance()}} |
{error, ASPG})
) -> flow_builder(ASPE, ASPF, ASPG, ASPH).
set_on_flow_enter(Builder, Hook) ->
{flow_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
{some, Hook},
erlang:element(14, Builder),
erlang:element(15, Builder),
erlang:element(16, Builder),
erlang:element(17, Builder)}.
-file("src/telega/flow/builder.gleam", 393).
?DOC(" Set flow leave hook\n").
-spec set_on_flow_leave(
flow_builder(ASPT, ASPU, ASPV, ASPW),
fun((telega@bot:context(ASPU, ASPV, ASPW), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(ASPU, ASPV, ASPW),
telega@flow@types:flow_instance()}} |
{error, ASPV})
) -> flow_builder(ASPT, ASPU, ASPV, ASPW).
set_on_flow_leave(Builder, Hook) ->
{flow_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
{some, Hook},
erlang:element(15, Builder),
erlang:element(16, Builder),
erlang:element(17, Builder)}.
-file("src/telega/flow/builder.gleam", 401).
?DOC(" Set flow-level TTL (maximum lifetime in milliseconds)\n").
-spec with_ttl(flow_builder(ASQI, ASQJ, ASQK, ASQL), integer()) -> flow_builder(ASQI, ASQJ, ASQK, ASQL).
with_ttl(Builder, Ms) ->
{flow_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder),
{some, Ms},
erlang:element(17, Builder)}.
-file("src/telega/flow/builder.gleam", 409).
?DOC(" Set timeout hook (called when flow or wait expires via lazy check)\n").
-spec on_timeout(
flow_builder(ASQU, ASQV, ASQW, ASQX),
fun((telega@bot:context(ASQV, ASQW, ASQX), telega@flow@types:flow_instance()) -> {ok,
telega@bot:context(ASQV, ASQW, ASQX)} |
{error, ASQW})
) -> flow_builder(ASQU, ASQV, ASQW, ASQX).
on_timeout(Builder, Handler) ->
{flow_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
erlang:element(15, Builder),
erlang:element(16, Builder),
{some, Handler}}.
-file("src/telega/flow/builder.gleam", 417).
?DOC(" Set flow exit hook\n").
-spec set_on_flow_exit(
flow_builder(ASRJ, ASRK, ASRL, ASRM),
fun((telega@bot:context(ASRK, ASRL, ASRM), telega@flow@types:flow_instance()) -> {ok,
telega@bot:context(ASRK, ASRL, ASRM)} |
{error, ASRL})
) -> flow_builder(ASRJ, ASRK, ASRL, ASRM).
set_on_flow_exit(Builder, Hook) ->
{flow_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
erlang:element(4, Builder),
erlang:element(5, Builder),
erlang:element(6, Builder),
erlang:element(7, Builder),
erlang:element(8, Builder),
erlang:element(9, Builder),
erlang:element(10, Builder),
erlang:element(11, Builder),
erlang:element(12, Builder),
erlang:element(13, Builder),
erlang:element(14, Builder),
{some, Hook},
erlang:element(16, Builder),
erlang:element(17, Builder)}.