но это middleware в axum, там не рекомендуют использовать box. Я пытался написать свою ResponceFuture<S>, но у меня ничего не выходит.
Скажите пожалуйста во что разворачивается async move {} в Rust, как мне самостоятельно реализовать такую Future?
Разворачивается в конечный автомат. При вызове poll() автомат что-то делает и (не) переходит в следующее состояние.
да, я знаю что он разворачивается в довольно сложный конечный автомат. Может на статьи хорошие есть ссылка. Мне необходимо понять как именно async move {} разворачивается
Например: async move { a.await; b.await; } | v Псевдокод enum State { S0(FutureA, FutureB), S1(FutureB), } fn poll(...) -> ... { match self { S0(a, b) => { if a.poll().ready() { if b.poll().ready() { return Ready; } else { self = S1(b); return Pending; } } } S1(b) => { if b.poll().ready() { return Ready; } else { return Pending; } } }
Я уже реализовал такое с готовыми Future в state, но мне необходимо в poll создать future их метода, а уже потом ее вызвать, я понимаю что это не верный путь . State должен содержать только собранные future, но как мне это обойти
Вот как это сейчас
Да, я это понял. Но у меня выходит будет req, его должна изменить первая future, использовать вторая future. Первая по мутабельной ссыке, вторая по значению
Все, до меня дошло как делать. Потом покажу что вышло.
Обсуждают сегодня