Size: a a a

Rust — русскоговорящее сообществo

2020 August 25

П

Паша Зерриканский... in Rust — русскоговорящее сообществo
Эрик
Есть вариант раскопать кишки и туда вставлять асинхронные вызовы.

https://docs.rs/tokio-tungstenite/0.11.0/src/tokio_tungstenite/lib.rs.html#158
В итоге вот этот код отрабатывает. Довольно длинные кишки.
https://github.com/snapview/tungstenite-rs/blob/master/src/handshake/server.rs#L223
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ну лови handle и там уже делай чего-нибудь.
источник

П

Паша Зерриканский... in Rust — русскоговорящее сообществo
Эрик
Ну лови handle и там уже делай чего-нибудь.
Спасибо, посмотрю.
источник

АД

Алер Денисов... in Rust — русскоговорящее сообществo
Эрик
&mut self (как и &self) в сигнатуре функции — это сокращённая форма записи self: &mut Self. Поэтому в теле функции кейворд self ассоциируется со ссылкой на Self, а не со значением.
я в курсе, но foo принимает не self, а instance.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Алер Денисов
я в курсе, но foo принимает не self, а instance.
Когда ты пишешь

fn foo(&must self) {
 let a = &mut self;
}


то тип у a получается let a: &mut &mut Self
источник

АД

Алер Денисов... in Rust — русскоговорящее сообществo
ага, я уже понял
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ну и ты передавал &mut &mut Self вместо &mut Self.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Паша Зерриканский
Спасибо, посмотрю.
Если тебе нужен неблочащийся вызов, то коллбек должен делать что-то вроде

let outer = SomeFutureCollector::new();
let callback = || {
 let fut = tokio::runtime::Handle::current().spawn(/* async block or function here */);
 outer.push(fut);
};


Если нужен блочащийся (по типу await на главном треде), то просто block_on() вместо spawn.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ну и пушить никуда не надо, block_on результат сразу отдаст.
источник

П

Паша Зерриканский... in Rust — русскоговорящее сообществo
Эрик
Ну и пушить никуда не надо, block_on результат сразу отдаст.
Да, так проще будет, мне только лекговесный запрос сделать.
Спасибо.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Вообще, там нет требований всяких `static, так что можно и Handle снаружи оставить, чтобы лишний раз функцию не дёргать.
источник

АК

Андрей Казанцев... in Rust — русскоговорящее сообществo
error[E0277]: the size for values of type `(dyn std::error::Error + 'static)` cannot be known at compilation time
  --> src\matcher.rs:135:33
   |
89  |     pub trait MatchStrategy {
   |               ------------- required by a bound in this
...
92  |         type MatchErr: std::error::Error;
   |                        ----------------- required by this bound in `matcher::strategies::MatchStrategy`
...
135 |                 type MatchErr = Box<dyn Error>;
   |                                 ^^^^^^^^^^^^^^ doesn't have a size known at compile-time
   |
   = help: the trait `std::marker::Sized` is not implemented for `(dyn std::error::Error + 'static)`
   = note: required because of the requirements on the impl of `std::error::Error` for `std::boxed::Box<(dyn std::error::Error + 'static)>`
источник

АК

Андрей Казанцев... in Rust — русскоговорящее сообществo
Что ему не нравиться?
источник

BV

Boris Vinogradov in Rust — русскоговорящее сообществo
Андрей Казанцев
Что ему не нравиться?
Так а что из сообщения не видно?
источник

АК

Андрей Казанцев... in Rust — русскоговорящее сообществo
Ну у меня box от ошибки
источник

АК

Андрей Казанцев... in Rust — русскоговорящее сообществo
Зачем он проверяет на size параметр T у бокса
источник

АК

Андрей Казанцев... in Rust — русскоговорящее сообществo
Или другими словами почему баунд потребовал sized?
источник

BV

Boris Vinogradov in Rust — русскоговорящее сообществo
Андрей Казанцев
Зачем он проверяет на size параметр T у бокса
А потому что он должен быть иначе оно работать не будет
источник

АК

Андрей Казанцев... in Rust — русскоговорящее сообществo
Почему?
источник

BV

Boris Vinogradov in Rust — русскоговорящее сообществo
Потому что так он устроен что ему требуется размер и он говорит это через трейт
источник