-record(config, { transitions :: list(scamper@config:transition_rule(any(), any(), any())), final_states :: list(any()), on_enter :: list({any(), fun((any(), any()) -> {ok, any()} | {error, binary()})}), on_exit :: list({any(), fun((any(), any()) -> {ok, any()} | {error, binary()})}), on_transition_state :: list({any(), fun((any(), any(), any(), any()) -> {ok, any()} | {error, binary()})}), global_on_enter :: list(fun((any(), any()) -> {ok, any()} | {error, binary()})), global_on_exit :: list(fun((any(), any()) -> {ok, any()} | {error, binary()})), global_on_transition :: list(fun((any(), any(), any(), any()) -> {ok, any()} | {error, binary()})), invariants :: list(fun((any()) -> {ok, nil} | {error, binary()})), event_policy :: scamper@config:event_policy(), history_limit :: gleam@option:option(integer()), history_snapshots :: boolean(), timeouts :: list({any(), integer(), any()}), timestamp_fn :: fun(() -> integer()) }).