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/3]).
-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(AMEP, AMEQ, AMER) :: {flow_builder,
binary(),
gleam@dict:dict(binary(), telega@flow@types:step_config(AMEP, AMEQ, AMER)),
fun((AMEP) -> binary()),
fun((binary()) -> {ok, AMEP} | {error, nil}),
telega@flow@types:flow_storage(AMER),
gleam@option:option(fun((telega@bot:context(AMEQ, AMER), telega@flow@types:flow_instance()) -> {ok,
telega@bot:context(AMEQ, AMER)} |
{error, AMER})),
gleam@option:option(fun((telega@bot:context(AMEQ, AMER), telega@flow@types:flow_instance(), gleam@option:option(AMER)) -> {ok,
telega@bot:context(AMEQ, AMER)} |
{error, AMER})),
list(fun((telega@bot:context(AMEQ, AMER), telega@flow@types:flow_instance(), fun(() -> {ok,
{telega@bot:context(AMEQ, AMER),
telega@flow@types:flow_action(AMEP),
telega@flow@types:flow_instance()}} |
{error, AMER})) -> {ok,
{telega@bot:context(AMEQ, AMER),
telega@flow@types:flow_action(AMEP),
telega@flow@types:flow_instance()}} |
{error, AMER})),
list(telega@flow@types:conditional_transition(AMEP)),
list(telega@flow@types:parallel_config(AMEP)),
list(telega@flow@types:subflow_config(AMEP, AMEQ, AMER)),
gleam@option:option(fun((telega@bot:context(AMEQ, AMER), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AMEQ, AMER),
telega@flow@types:flow_instance()}} |
{error, AMER})),
gleam@option:option(fun((telega@bot:context(AMEQ, AMER), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AMEQ, AMER),
telega@flow@types:flow_instance()}} |
{error, AMER})),
gleam@option:option(fun((telega@bot:context(AMEQ, AMER), telega@flow@types:flow_instance()) -> {ok,
telega@bot:context(AMEQ, AMER)} |
{error, AMER})),
gleam@option:option(integer()),
gleam@option:option(fun((telega@bot:context(AMEQ, AMER), telega@flow@types:flow_instance()) -> {ok,
telega@bot:context(AMEQ, AMER)} |
{error, AMER}))}.
-file("src/telega/flow/builder.gleam", 46).
?DOC(" Create a new flow builder\n").
-spec new(
binary(),
telega@flow@types:flow_storage(AMES),
fun((AMEU) -> binary()),
fun((binary()) -> {ok, AMEU} | {error, nil})
) -> flow_builder(AMEU, any(), AMES).
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", 447).
?DOC(" Helper to create a string_to_step function for a list of steps\n").
-spec create_string_to_step(list({binary(), AMPU})) -> fun((binary()) -> {ok,
AMPU} |
{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", 73).
?DOC(" Create a flow builder with default string conversion (uses string.inspect)\n").
-spec new_with_default_converters(
binary(),
telega@flow@types:flow_storage(AMFB),
list({binary(), AMFD})
) -> flow_builder(AMFD, any(), AMFB).
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", 99).
?DOC(" Add a step to the flow\n").
-spec add_step(
flow_builder(AMFJ, AMFK, AMFL),
AMFJ,
fun((telega@bot:context(AMFK, AMFL), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AMFK, AMFL),
telega@flow@types:flow_action(AMFJ),
telega@flow@types:flow_instance()}} |
{error, AMFL})
) -> flow_builder(AMFJ, AMFK, AMFL).
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", 111).
?DOC(" Add a step with middleware\n").
-spec add_step_with_middleware(
flow_builder(AMFV, AMFW, AMFX),
AMFV,
list(fun((telega@bot:context(AMFW, AMFX), telega@flow@types:flow_instance(), fun(() -> {ok,
{telega@bot:context(AMFW, AMFX),
telega@flow@types:flow_action(AMFV),
telega@flow@types:flow_instance()}} |
{error, AMFX})) -> {ok,
{telega@bot:context(AMFW, AMFX),
telega@flow@types:flow_action(AMFV),
telega@flow@types:flow_instance()}} |
{error, AMFX})),
fun((telega@bot:context(AMFW, AMFX), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AMFW, AMFX),
telega@flow@types:flow_action(AMFV),
telega@flow@types:flow_instance()}} |
{error, AMFX})
) -> flow_builder(AMFV, AMFW, AMFX).
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", 124).
?DOC(" Add a step with lifecycle hooks\n").
-spec add_step_with_hooks(
flow_builder(AMGL, AMGM, AMGN),
AMGL,
fun((telega@bot:context(AMGM, AMGN), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AMGM, AMGN),
telega@flow@types:flow_action(AMGL),
telega@flow@types:flow_instance()}} |
{error, AMGN}),
gleam@option:option(fun((telega@bot:context(AMGM, AMGN), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AMGM, AMGN), telega@flow@types:flow_instance()}} |
{error, AMGN})),
gleam@option:option(fun((telega@bot:context(AMGM, AMGN), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AMGM, AMGN), telega@flow@types:flow_instance()}} |
{error, AMGN}))
) -> flow_builder(AMGL, AMGM, AMGN).
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", 137).
?DOC(" Add a step with hooks and middleware\n").
-spec add_step_with_hooks_and_middleware(
flow_builder(AMHD, AMHE, AMHF),
AMHD,
fun((telega@bot:context(AMHE, AMHF), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AMHE, AMHF),
telega@flow@types:flow_action(AMHD),
telega@flow@types:flow_instance()}} |
{error, AMHF}),
list(fun((telega@bot:context(AMHE, AMHF), telega@flow@types:flow_instance(), fun(() -> {ok,
{telega@bot:context(AMHE, AMHF),
telega@flow@types:flow_action(AMHD),
telega@flow@types:flow_instance()}} |
{error, AMHF})) -> {ok,
{telega@bot:context(AMHE, AMHF),
telega@flow@types:flow_action(AMHD),
telega@flow@types:flow_instance()}} |
{error, AMHF})),
gleam@option:option(fun((telega@bot:context(AMHE, AMHF), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AMHE, AMHF), telega@flow@types:flow_instance()}} |
{error, AMHF})),
gleam@option:option(fun((telega@bot:context(AMHE, AMHF), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AMHE, AMHF), telega@flow@types:flow_instance()}} |
{error, AMHF}))
) -> flow_builder(AMHD, AMHE, AMHF).
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", 151).
?DOC(" Add global middleware that applies to all steps\n").
-spec add_global_middleware(
flow_builder(AMHZ, AMIA, AMIB),
fun((telega@bot:context(AMIA, AMIB), telega@flow@types:flow_instance(), fun(() -> {ok,
{telega@bot:context(AMIA, AMIB),
telega@flow@types:flow_action(AMHZ),
telega@flow@types:flow_instance()}} |
{error, AMIB})) -> {ok,
{telega@bot:context(AMIA, AMIB),
telega@flow@types:flow_action(AMHZ),
telega@flow@types:flow_instance()}} |
{error, AMIB})
) -> flow_builder(AMHZ, AMIA, AMIB).
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", 162).
?DOC(" Add conditional transition\n").
-spec add_conditional(
flow_builder(AMIL, AMIM, AMIN),
AMIL,
fun((telega@flow@types:flow_instance()) -> boolean()),
AMIL,
AMIL
) -> flow_builder(AMIL, AMIM, AMIN).
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", 183).
?DOC(" Add multi-way conditional\n").
-spec add_multi_conditional(
flow_builder(AMIU, AMIV, AMIW),
AMIU,
list({fun((telega@flow@types:flow_instance()) -> boolean()), AMIU}),
AMIU
) -> flow_builder(AMIU, AMIV, AMIW).
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", 210).
?DOC(
" Add parallel step execution.\n"
"\n"
" @deprecated Use `parallel()` instead for cleaner API.\n"
).
-spec add_parallel_steps(flow_builder(AMJO, AMJP, AMJQ), AMJO, list(AMJO), AMJO) -> flow_builder(AMJO, AMJP, AMJQ).
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", 198).
?DOC(" Add parallel step execution (simplified API).\n").
-spec parallel(flow_builder(AMJE, AMJF, AMJG), AMJE, list(AMJE), AMJE) -> flow_builder(AMJE, AMJF, AMJG).
parallel(Builder, From, Steps, Join) ->
add_parallel_steps(Builder, From, Steps, Join).
-file("src/telega/flow/builder.gleam", 230).
?DOC(" Add sub-flow\n").
-spec add_subflow(
flow_builder(AMJY, AMJZ, AMKA),
AMJY,
telega@flow@types:flow(gleam@dynamic:dynamic_(), AMJZ, AMKA),
AMJY,
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(AMJY, AMJZ, AMKA).
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", 456).
-spec unsafe_coerce(any()) -> any().
unsafe_coerce(Value) ->
telega@internal@coerce:unsafe_coerce(Value).
-file("src/telega/flow/builder.gleam", 413).
?DOC(" Build the flow\n").
-spec build(flow_builder(AMPJ, AMPK, AMPL), AMPJ) -> telega@flow@types:flow(AMPJ, AMPK, AMPL).
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", 442).
-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", 438).
-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", 252).
?DOC(" Add an inline subflow defined within the parent flow\n").
-spec with_inline_subflow(
flow_builder(AMKO, AMKP, AMKQ),
binary(),
AMKO,
AMKO,
binary(),
list({binary(),
fun((telega@bot:context(AMKP, AMKQ), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AMKP, AMKQ),
telega@flow@types:flow_action(telega@flow@types:inline_step()),
telega@flow@types:flow_instance()}} |
{error, AMKQ})})
) -> flow_builder(AMKO, AMKP, AMKQ).
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", 305).
?DOC(" Add an inline subflow with custom argument and result mapping\n").
-spec with_inline_subflow_mapped(
flow_builder(AMLD, AMLE, AMLF),
binary(),
AMLD,
AMLD,
binary(),
list({binary(),
fun((telega@bot:context(AMLE, AMLF), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AMLE, AMLF),
telega@flow@types:flow_action(telega@flow@types:inline_step()),
telega@flow@types:flow_instance()}} |
{error, AMLF})}),
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(AMLD, AMLE, AMLF).
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", 346).
?DOC(" Navigate to next inline step by name\n").
-spec inline_next(
telega@bot:context(AMLW, AMLX),
telega@flow@types:flow_instance(),
binary()
) -> {ok,
{telega@bot:context(AMLW, AMLX),
telega@flow@types:flow_action(telega@flow@types:inline_step()),
telega@flow@types:flow_instance()}} |
{error, AMLX}.
inline_next(Ctx, Instance, Step_name) ->
{ok, {Ctx, {next, {inline_step, Step_name}}, Instance}}.
-file("src/telega/flow/builder.gleam", 355).
?DOC(" Set completion handler\n").
-spec on_complete(
flow_builder(AMMD, AMME, AMMF),
fun((telega@bot:context(AMME, AMMF), telega@flow@types:flow_instance()) -> {ok,
telega@bot:context(AMME, AMMF)} |
{error, AMMF})
) -> flow_builder(AMMD, AMME, AMMF).
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", 364).
?DOC(" Set error handler\n").
-spec on_error(
flow_builder(AMMS, AMMT, AMMU),
fun((telega@bot:context(AMMT, AMMU), telega@flow@types:flow_instance(), gleam@option:option(AMMU)) -> {ok,
telega@bot:context(AMMT, AMMU)} |
{error, AMMU})
) -> flow_builder(AMMS, AMMT, AMMU).
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", 373).
?DOC(" Set flow enter hook\n").
-spec set_on_flow_enter(
flow_builder(AMNI, AMNJ, AMNK),
fun((telega@bot:context(AMNJ, AMNK), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AMNJ, AMNK), telega@flow@types:flow_instance()}} |
{error, AMNK})
) -> flow_builder(AMNI, AMNJ, AMNK).
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", 381).
?DOC(" Set flow leave hook\n").
-spec set_on_flow_leave(
flow_builder(AMNT, AMNU, AMNV),
fun((telega@bot:context(AMNU, AMNV), telega@flow@types:flow_instance()) -> {ok,
{telega@bot:context(AMNU, AMNV), telega@flow@types:flow_instance()}} |
{error, AMNV})
) -> flow_builder(AMNT, AMNU, AMNV).
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", 389).
?DOC(" Set flow-level TTL (maximum lifetime in milliseconds)\n").
-spec with_ttl(flow_builder(AMOE, AMOF, AMOG), integer()) -> flow_builder(AMOE, AMOF, AMOG).
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", 397).
?DOC(" Set timeout hook (called when flow or wait expires via lazy check)\n").
-spec on_timeout(
flow_builder(AMON, AMOO, AMOP),
fun((telega@bot:context(AMOO, AMOP), telega@flow@types:flow_instance()) -> {ok,
telega@bot:context(AMOO, AMOP)} |
{error, AMOP})
) -> flow_builder(AMON, AMOO, AMOP).
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", 405).
?DOC(" Set flow exit hook\n").
-spec set_on_flow_exit(
flow_builder(AMOY, AMOZ, AMPA),
fun((telega@bot:context(AMOZ, AMPA), telega@flow@types:flow_instance()) -> {ok,
telega@bot:context(AMOZ, AMPA)} |
{error, AMPA})
) -> flow_builder(AMOY, AMOZ, AMPA).
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)}.