использованием telegraf + overmind. Этот кот удалось организовать так чтобы если любой из обработчиков стейтов кидает исключение то сообщение затирается. Выглядело это приблизительно вот так
bot.start(async (context) => {
const result = context.stateMachine.actions.start()
// @ts-ignore
if (result?.canTransition === false)
context.deleteMessage(context.message.message_id)
})
Там overmind — либа для FSM ловит исключения и возвращает состояние внутри которого есть bool canTransition. Это по настоящему не очень важно, оно могло бы и просто кидать исключение которое можно было бы поймать в catch() асинхронной функции
Я хотел бы организовать код аналогичным образом и на rust
@p0lunin а твой диспатчер это и есть либа для FSM?
Внутри teloxide есть примитивный FSM но в нашем случае важен не сам FSM, а важно то что оно должно бабблиться так чтобы перехватывалось в одном месте
это я понимаю. Меня интересует нормальный FSM, а не наколенные поделки
Я понял что ты хочешь. Нет, какого-то специального механизма нет. Можешь создать свой тип ошибки и в error_handler проверять ошибку и в зависимости от нее делать что ты хочешь.
https://github.com/eugene-babichenko/rust-fsm Есть вот это но его было сложно женить на телеграмном коде и я отказался в пользу телоксида
оно убого по фичам по сравнению с https://github.com/erikzenker/hsm
hsm это такой fsm с наследованием?
hsm это реализация спеки UML State Machine
Обсуждают сегодня