Э
Size: a a a
Э
p
ИЛ
Э
Э
Э
p
d
Э
Э
p
Э
Э
unsafe
.Э
const_cast
позвать на реальную константу, а не иммутабельную переменную в крестах.p
unsafe
.p
Э
a
pub struct Listener {у меня есть вот такая над ней обертка:
...
}
impl Listener {
pub fn on_update_new_message<F>(&mut self, fnc: F) -> &mut Self
where F: Fn((&EventApi, &UpdateNewMessage)) -> TGResult<()> + Send + Sync + 'static
...
}
}
pub struct TgClient {хочетя докинуть в структуру метод, который вызывал бы listener.on_update_new_message. в примерах из соответствуюшей илибы туда передается closure, но он создается в main'е, так что static-lifetime ок
client: Client
}
impl TgClient {компилятор ругается:
fn start_listen_updates(&mut self, channel: Mutex<mpsc::Sender<Update>>) { // mutex, т.к. Sender не реализует Sync
let listener = self.client.listener();
listener.on_update_new_message(get_new_message_handler(channel));
}
}
fn get_new_message_handler(channel: Mutex<mpsc::Sender<Update>>) -> impl Fn((&EventApi, &UpdateNewMessage)) -> TGResult<()> + 'static {
let local = channel.into_inner().unwrap().clone();
move|(api, update)| {
local.send(Update::NewMessage(update.clone())).unwrap();
Ok(())
}
}
50 | listener.on_update_new_message(get_new_message_handler(channel));существует ли решение? или канал не вариант и надо как-то через lazy_static всё делать с обработкой апдейтов непосредственно внутри замыкания?
| ^^^^^^^^^^^^^^^^^^^^^ `std::sync::mpsc::Sender<rtdlib::types::update::Update>` cannot be shared between threads safely
...
149 | fn get_new_message_handler(channel: Mutex<mpsc::Sender<Update>>) -> impl Fn((&EventApi, &UpdateNewMessage)) -> TGResult<()> + 'static {
| ----------------------------------------------------------------- within this `impl for<'r, 's> std::ops::Fn<((&'r telegram_client::api::aevent::EventApi, &'s rtdlib::types::update::UpdateNewMessage),)>`
a
AV