1use crate::{backend::Backend, Component, Node};
2use std::{cell::RefCell, fmt::Debug, marker::PhantomData, rc::Rc};
3
4pub struct Program<APP, MSG, B> {
8 backend: Rc<B>,
9 _phantom_data: PhantomData<MSG>,
10 _phantom_app: PhantomData<APP>,
11}
12
13impl<APP, MSG, B> Program<APP, MSG, B>
14where
15 MSG: Clone + Debug + 'static,
16 APP: Component<MSG> + 'static,
17 B: Backend<APP, MSG>,
18{
19 pub fn new(app: APP) -> Rc<Self> {
22 println!("Instantiation..");
23 let program = Program {
24 backend: B::init(app),
25 _phantom_data: PhantomData,
26 _phantom_app: PhantomData,
27 };
28 Rc::new(program)
29 }
30
31 pub fn dispatch(self: &Rc<Self>, msg: MSG) {
33 self.backend.start_render();
34 }
35}