Alexander
Alexander
Наконец растец хоть выучу, так как питон не пошёл.
Слава
Я правильно понимаю, что на обложке - рак?
պլհկ
Нет
Alexander
Раст вон слева на водоросли сидит наверное. А в центре это наверняка какой-то менеджер.
deepcode.eth
вот похожий крабик, только без шестерёнки на спине
კაცი
Berkus
Tuntz
коллеги, а как реализовать трейт для разных типов Fn?
Tuntz
ругается на conflicting implementations если через дженерик
Tuntz
а для Box делать не хочу потому что не эргономично замыкания подставлять
Berkus
Tuntz
trait MyTrait { fn do(&self, ctx: Context) -> Box<Future<Item = MyType, Error = Error>> }
impl<F: Fn(Context) -> Box<Future<Item = MyType, Error = Error>>> MyTrait for F { ... }
impl<F: Fn(&mut Context) -> Result<MyType, Error> > MyTrait for F { ... }
Tuntz
так пишет ошибку
Anonymous
Anonymous
<стикер из твин пикс>
Cuno
Cuno
Cuno
Cuno
https://doc.rust-lang.org/src/core/ops/function.rs.html#143-147
Cuno
а, нет, не так прочитал -_-
Αλεχ
Cuno
red75prime
Cuno
Cuno
см пример выше с NewService
red75prime
Если надо передать клозуру которая принимает &mut Ctx, передаём |mut ctx|{closure(&mut ctx)}
Cuno
Cuno
при этом в трейте возвращаемый тип общий
Cuno
т.е. для разных замыканий будет разная логика
𝙽𝚒𝚌𝚔
Можно обернуть в newtype на худой конец и избежать всех этих граблей
Cuno
(исходный вопрос задавал не я, пингуйте @vorot93 )
Anonymous
Anonymous
Alexander
А в playground можно с tokio играть?
Vladimir
Alexander
Ну просто ещё надо уметь что-то несетевое дёргать кроме таймера.
Vladimir
Alexander
Ну надо ещё чтоб не убилось через секунду, там же ограничения. Впрочем похоже что оно только после 7 секунд убивается - работает.
Tuntz
Tuntz
можно было бы написать как синхронно, так и асинхронно
Tuntz
если синхронно, то вернуть MyType и мутировать Context
Tuntz
если асинхронно, то сожрать Context и вернуть его вместе с MyType
Денис
https://www.reddit.com/r/rust/comments/92eukb/httpsgitlabcommexusfuturesretry/
Alexander
Alexander
Alexander
А через core работало почему-то.
Alexander
Почему select не простой стрим выдаёт?
Alexander
Запутался уже - сорян.
Денис
селект выдаёт тупл из обоих фьючеров
Денис
точнее результат одного + другой фьючер
Денис
Alexander
Ага, и как его запустить тогда просто как один стрим?
Денис
for_each возвращает фьючу, а не стрим
Денис
tokio::run(i1.select(i2).map(|_| ()).map_err(|_| ()))
Anton
Alexander
Денис
ну это тебе решать =) если ты хочешь выйти, когда какая-либо из фьюч завершится, то юзай селект; иначе юзай джойн
Alexander
Признаться что-то доки по tokio что-то ньюансы не раскрывают.
Денис
(это если чё не токийская тема, а фьючи)
Денис
ну и да, у них имхо с туториалами туговато
Alexander
Оно вроде если на пальцах - то вроде всё изи, а как начинаешь писать - то что-то не сходится.
Денис
ну надо доки смотреть, какие где типы возвращаются :)
Денис
фьючи в обоих случаях запускаются параллельно, селект ждёт любой из готовых, и если ты сделаешь как я предложил, другая просто дропнется; а джойн будет ждать завершения обеих
Alexander
Денис
я же говорю, что они запускаются одновременно
Alexander
Ааа, в том плане, что если она закончится - то селекту плевать?
Денис
в случае селекта, когда какая-то из фьючь завершится, то селект сразу выйдет, и другая фьюча будет тебе доступна через возвращаемое значение. если сделаешь как я предложил — .map(|_|()), то эта другая фьюча просто дропнется
Alexander
А, ну в том плане, что можно её например потом вручную ну например запустить, если надо. Понял, спасибо.
Alexander
Т.е. она её возвращает ну просто на всякий случай .
Денис
да, всё так, там второй возвращаемый тип — https://docs.rs/tokio/0.1.7/tokio/prelude/future/struct.SelectNext.html
Alexander
А делается это видимо за тем что фьюча овнится, а то бы просто можно было бы её определение выше использовать.
Денис
да)
Маjко
Посуны
Маjко
Тут был мемасик
Маjко
В котором краб уничтожает город