use egui::Context;
#[cfg(feature = "runtime")]
type ViewSender<Message> = tokio::sync::mpsc::Sender<Message>;
#[cfg(not(feature = "runtime"))]
type ViewSender<Message> = std::sync::mpsc::Sender<Message>;
#[derive(Clone)]
pub struct ViewContext<Message>
where
Message: Send + 'static,
{
sender: ViewSender<Message>,
}
impl<Message> ViewContext<Message>
where
Message: Send + 'static,
{
#[cfg_attr(not(feature = "runtime"), allow(dead_code))]
pub(crate) fn new(sender: ViewSender<Message>) -> Self {
Self { sender }
}
}
#[cfg(feature = "runtime")]
impl<Message> ViewContext<Message>
where
Message: Send + 'static,
{
pub fn send(&self, message: Message) {
let _ = self.sender.try_send(message);
}
}
#[cfg(not(feature = "runtime"))]
impl<Message> ViewContext<Message>
where
Message: Send + 'static,
{
pub fn send(&self, message: Message) {
let _ = self.sender.send(message);
}
}
pub type ViewFn<Model, Message> = fn(&Model, &Context, &ViewContext<Message>);