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(AXNQ, AXNR, AXNS, AXNT) :: {flow_builder,
binary(),
gleam@dict:dict(binary(), telega@flow@types:step_config(AXNQ, AXNR, AXNS, AXNT)),
fun((AXNQ) -> binary()),
fun((binary()) -> {ok, AXNQ} | {error, nil}),
telega@flow@types:flow_storage(AXNS),
gleam@option:option(fun((telega@bot:context(AXNR, AXNS, AXNT), telega@flow@types:flow_instance()) -> {ok,
telega@bot:context(AXNR, AXNS, AXNT)} |
{error, AXNS})),
gleam@option:option(fun((telega@bot:context(AXNR, AXNS, AXNT), telega@flow@types:flow_instance(), gleam@option:option(AXNS)) -> {ok,
telega@bot:context(AXNR, AXNS, AXNT)} |
{error, AXNS})),
list(fun((telega@bot:context(AXNR, AXNS, AXNT), telega@flow@types:flow_instance(), fun(() -> {ok,
{telega@bot:context(AXNR, AXNS, AXNT),
telega@flow@types:flow_action(AXNQ),
telega@flow@types:flow_instance()}} |
{error, AXNS})) -> {ok,
{telega@bot:context(AXNR, AXNS, AXNT),
telega@flow@types:flow_action(AXNQ),
telega@flow@types:flow_instance()}} |
{error, AXNS})),
list(telega@flow@types:conditional_transition(AXNQ)),
list(telega@flow@types:parallel_config(AXNQ)),
list(telega@flow@types:subflow_config(AXNQ, AXNR, AXNS, AXNT)),
gleam@option:option(fun((telega@bot:context(AXNR, AXNS, AXNT), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AXNR, AXNS, AXNT),
telega@flow@types:flow_instance()}} |
{error, AXNS})),
gleam@option:option(fun((telega@bot:context(AXNR, AXNS, AXNT), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AXNR, AXNS, AXNT),
telega@flow@types:flow_instance()}} |
{error, AXNS})),
gleam@option:option(fun((telega@bot:context(AXNR, AXNS, AXNT), telega@flow@types:flow_instance()) -> {ok,
telega@bot:context(AXNR, AXNS, AXNT)} |
{error, AXNS})),
gleam@option:option(integer()),
gleam@option:option(fun((telega@bot:context(AXNR, AXNS, AXNT), telega@flow@types:flow_instance()) -> {ok,
telega@bot:context(AXNR, AXNS, AXNT)} |
{error, AXNS}))}.
-file("src/telega/flow/builder.gleam", 51).
?DOC(" Create a new flow builder\n").
-spec new(
binary(),
telega@flow@types:flow_storage(AXNU),
fun((AXNW) -> binary()),
fun((binary()) -> {ok, AXNW} | {error, nil})
) -> flow_builder(AXNW, any(), AXNU, 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(), AYCJ})) -> fun((binary()) -> {ok,
AYCJ} |
{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(AXOF),
list({binary(), AXOH})
) -> flow_builder(AXOH, any(), AXOF, 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(AXOP, AXOQ, AXOR, AXOS),
AXOP,
fun((telega@bot:context(AXOQ, AXOR, AXOS), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AXOQ, AXOR, AXOS),
telega@flow@types:flow_action(AXOP),
telega@flow@types:flow_instance()}} |
{error, AXOR})
) -> flow_builder(AXOP, AXOQ, AXOR, AXOS).
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(AXPF, AXPG, AXPH, AXPI),
AXPF,
list(fun((telega@bot:context(AXPG, AXPH, AXPI), telega@flow@types:flow_instance(), fun(() -> {ok,
{telega@bot:context(AXPG, AXPH, AXPI),
telega@flow@types:flow_action(AXPF),
telega@flow@types:flow_instance()}} |
{error, AXPH})) -> {ok,
{telega@bot:context(AXPG, AXPH, AXPI),
telega@flow@types:flow_action(AXPF),
telega@flow@types:flow_instance()}} |
{error, AXPH})),
fun((telega@bot:context(AXPG, AXPH, AXPI), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AXPG, AXPH, AXPI),
telega@flow@types:flow_action(AXPF),
telega@flow@types:flow_instance()}} |
{error, AXPH})
) -> flow_builder(AXPF, AXPG, AXPH, AXPI).
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(AXQA, AXQB, AXQC, AXQD),
AXQA,
fun((telega@bot:context(AXQB, AXQC, AXQD), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AXQB, AXQC, AXQD),
telega@flow@types:flow_action(AXQA),
telega@flow@types:flow_instance()}} |
{error, AXQC}),
gleam@option:option(fun((telega@bot:context(AXQB, AXQC, AXQD), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AXQB, AXQC, AXQD),
telega@flow@types:flow_instance()}} |
{error, AXQC})),
gleam@option:option(fun((telega@bot:context(AXQB, AXQC, AXQD), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AXQB, AXQC, AXQD),
telega@flow@types:flow_instance()}} |
{error, AXQC}))
) -> flow_builder(AXQA, AXQB, AXQC, AXQD).
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(AXQY, AXQZ, AXRA, AXRB),
AXQY,
fun((telega@bot:context(AXQZ, AXRA, AXRB), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AXQZ, AXRA, AXRB),
telega@flow@types:flow_action(AXQY),
telega@flow@types:flow_instance()}} |
{error, AXRA}),
list(fun((telega@bot:context(AXQZ, AXRA, AXRB), telega@flow@types:flow_instance(), fun(() -> {ok,
{telega@bot:context(AXQZ, AXRA, AXRB),
telega@flow@types:flow_action(AXQY),
telega@flow@types:flow_instance()}} |
{error, AXRA})) -> {ok,
{telega@bot:context(AXQZ, AXRA, AXRB),
telega@flow@types:flow_action(AXQY),
telega@flow@types:flow_instance()}} |
{error, AXRA})),
gleam@option:option(fun((telega@bot:context(AXQZ, AXRA, AXRB), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AXQZ, AXRA, AXRB),
telega@flow@types:flow_instance()}} |
{error, AXRA})),
gleam@option:option(fun((telega@bot:context(AXQZ, AXRA, AXRB), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AXQZ, AXRA, AXRB),
telega@flow@types:flow_instance()}} |
{error, AXRA}))
) -> flow_builder(AXQY, AXQZ, AXRA, AXRB).
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(AXSB, AXSC, AXSD, AXSE),
fun((telega@bot:context(AXSC, AXSD, AXSE), telega@flow@types:flow_instance(), fun(() -> {ok,
{telega@bot:context(AXSC, AXSD, AXSE),
telega@flow@types:flow_action(AXSB),
telega@flow@types:flow_instance()}} |
{error, AXSD})) -> {ok,
{telega@bot:context(AXSC, AXSD, AXSE),
telega@flow@types:flow_action(AXSB),
telega@flow@types:flow_instance()}} |
{error, AXSD})
) -> flow_builder(AXSB, AXSC, AXSD, AXSE).
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(AXSR, AXSS, AXST, AXSU),
AXSR,
fun((telega@flow@types:flow_instance()) -> boolean()),
AXSR,
AXSR
) -> flow_builder(AXSR, AXSS, AXST, AXSU).
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(AXTD, AXTE, AXTF, AXTG),
AXTD,
list({fun((telega@flow@types:flow_instance()) -> boolean()), AXTD}),
AXTD
) -> flow_builder(AXTD, AXTE, AXTF, AXTG).
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(AXUD, AXUE, AXUF, AXUG),
AXUD,
list(AXUD),
AXUD
) -> flow_builder(AXUD, AXUE, AXUF, AXUG).
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(AXTQ, AXTR, AXTS, AXTT), AXTQ, list(AXTQ), AXTQ) -> flow_builder(AXTQ, AXTR, AXTS, AXTT).
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(AXUQ, AXUR, AXUS, AXUT),
AXUQ,
telega@flow@types:flow(gleam@dynamic:dynamic_(), AXUR, AXUS, AXUT),
AXUQ,
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(AXUQ, AXUR, AXUS, AXUT).
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(AYBV, AYBW, AYBX, AYBY), AYBV) -> telega@flow@types:flow(AYBV, AYBW, AYBX, AYBY).
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(AXVK, AXVL, AXVM, AXVN),
binary(),
AXVK,
AXVK,
binary(),
list({binary(),
fun((telega@bot:context(AXVL, AXVM, AXVN), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AXVL, AXVM, AXVN),
telega@flow@types:flow_action(telega@flow@types:inline_step()),
telega@flow@types:flow_instance()}} |
{error, AXVM})})
) -> flow_builder(AXVK, AXVL, AXVM, AXVN).
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(AXWE, AXWF, AXWG, AXWH),
binary(),
AXWE,
AXWE,
binary(),
list({binary(),
fun((telega@bot:context(AXWF, AXWG, AXWH), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AXWF, AXWG, AXWH),
telega@flow@types:flow_action(telega@flow@types:inline_step()),
telega@flow@types:flow_instance()}} |
{error, AXWG})}),
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(AXWE, AXWF, AXWG, AXWH).
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(AXXC, AXXD, AXXE),
telega@flow@types:flow_instance(),
binary()
) -> {ok,
{telega@bot:context(AXXC, AXXD, AXXE),
telega@flow@types:flow_action(telega@flow@types:inline_step()),
telega@flow@types:flow_instance()}} |
{error, AXXD}.
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(AXXM, AXXN, AXXO, AXXP),
fun((telega@bot:context(AXXN, AXXO, AXXP), telega@flow@types:flow_instance()) -> {ok,
telega@bot:context(AXXN, AXXO, AXXP)} |
{error, AXXO})
) -> flow_builder(AXXM, AXXN, AXXO, AXXP).
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(AXYG, AXYH, AXYI, AXYJ),
fun((telega@bot:context(AXYH, AXYI, AXYJ), telega@flow@types:flow_instance(), gleam@option:option(AXYI)) -> {ok,
telega@bot:context(AXYH, AXYI, AXYJ)} |
{error, AXYI})
) -> flow_builder(AXYG, AXYH, AXYI, AXYJ).
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(AXZB, AXZC, AXZD, AXZE),
fun((telega@bot:context(AXZC, AXZD, AXZE), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AXZC, AXZD, AXZE),
telega@flow@types:flow_instance()}} |
{error, AXZD})
) -> flow_builder(AXZB, AXZC, AXZD, AXZE).
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(AXZQ, AXZR, AXZS, AXZT),
fun((telega@bot:context(AXZR, AXZS, AXZT), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AXZR, AXZS, AXZT),
telega@flow@types:flow_instance()}} |
{error, AXZS})
) -> flow_builder(AXZQ, AXZR, AXZS, AXZT).
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(AYAF, AYAG, AYAH, AYAI), integer()) -> flow_builder(AYAF, AYAG, AYAH, AYAI).
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(AYAR, AYAS, AYAT, AYAU),
fun((telega@bot:context(AYAS, AYAT, AYAU), telega@flow@types:flow_instance()) -> {ok,
telega@bot:context(AYAS, AYAT, AYAU)} |
{error, AYAT})
) -> flow_builder(AYAR, AYAS, AYAT, AYAU).
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(AYBG, AYBH, AYBI, AYBJ),
fun((telega@bot:context(AYBH, AYBI, AYBJ), telega@flow@types:flow_instance()) -> {ok,
telega@bot:context(AYBH, AYBI, AYBJ)} |
{error, AYBI})
) -> flow_builder(AYBG, AYBH, AYBI, AYBJ).
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)}.