1use crate::{dispatcher::Handle, model::Update};
2
3pub trait RenderContext {
4 type Widget;
5 type Queue: RenderQueue;
6
7 fn show(&mut self, widget: Self::Widget);
8 fn main_loop<'a>(&'a mut self, f: impl FnMut(&Self) -> () + 'a);
9 fn queue(&mut self) -> Self::Queue;
10 fn quit(&self);
11}
12
13pub trait RenderQueue: Send + Sync + 'static {
14 fn execute(&self, f: Box<dyn FnOnce()>);
15}
16
17pub trait Component {
19 type Renderer: RenderContext;
20 type Model: Update;
21
22 fn root(&self) -> <Self::Renderer as RenderContext>::Widget;
23 fn view(ui: &Self::Renderer, handle: Handle<<Self::Model as Update>::Action>, model: &Self::Model) -> Self;
24 #[allow(unused_variables)]
25 fn update(&mut self, ui: &Self::Renderer, model: &Self::Model) {}
26}