1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
use crate::{ messenger::{Message, MessageData}, widget::WidgetId, }; use std::sync::mpsc::Sender; pub type Signal = (WidgetId, Box<dyn MessageData>); #[derive(Clone)] pub struct SignalSender { id: WidgetId, sender: Sender<Signal>, } impl SignalSender { pub fn new(id: WidgetId, sender: Sender<Signal>) -> Self { Self { id, sender } } pub fn write<T>(&self, message: T) -> bool where T: 'static + MessageData, { self.sender .send((self.id.clone(), Box::new(message))) .is_ok() } pub fn write_raw(&self, message: Message) -> bool { self.sender.send((self.id.clone(), message)).is_ok() } pub fn write_raw_all<I>(&self, messages: I) where I: IntoIterator<Item = Message>, { for data in messages { drop(self.sender.send((self.id.clone(), data))); } } }